#2069. [合肥市] 小 c 的 树 (tree)

[合肥市] 小 c 的 树 (tree)

题目描述

定义:树是一个有 n 个点 n-1 条边的无向连通图,任意两个点间恰有一条简单路径。最末端仅有一条边相连的节点称为叶子。

小 C 家有一个后院,院子的中央种有一棵树。小 C 喜欢在雨后初晴时到院子里观察。这棵参天大树可以抽象成一棵 n 个节点的树,节点从 1 到 n 编号,树的根在 1 号节点。第 i 个节点有一个正整数 ai 表示该处的美感值。

小 C 尤其喜欢观察蚂蚁。这天,小 C 捉来了 m 只蚂蚁。他想挑选树上的 m 个节点,每个节点放上一只蚂蚁。小 C 知道蚂蚁在树上时,会一直朝着根的方向移动,中间会经过一个个节点,最后到达根节点,之后,蚂蚁便到达了地面。

热爱自然的小 C 想知道这 m 只蚂蚁经过的节点的美感值和的最大值是多少,于是请你来帮帮忙。注意经过的节点包括初始节点,且多次访问的节点仅算入一次。.

输入格式

从文件 tree.in 中读取数据。

共三行,第一行有两个正整数 n, m,表示树的大小和选取的节点数;

第二行有 n 个非负整数,第 i 个数表示 ai;

第三行有 n - 1 个正整数,第 i 个数 fi 表示节点 i + 1 的父亲节点。保证 0 < fi ≤ i。

输出格式

输出到文件 tree.out 中。

仅一行一个数,表示美感值和的最大值。

输入输出样列

5 2
1 2 3 1 3
1 1 2 2
9
10 3
3 4 2 2 3 1 3 3 5 4
1 2 1 1 3 3 2 4 6
24

说明

【样例 1 解释】

这棵树的形态如下图:

选择 {3, 5} 两个节点,则经过的节点集合为 {1, 2, 3, 5}。

红色数字为每个节点的美感值,故美感值和为 1 + 2 + 3 + 3 = 9。可以证明这个值是最大值。

【样例 2 解释】

选取 {4, 9, 10} 三个节点,得到的美感值和为 24。方案可能不唯一。

【数据范围】

对于所有数据:0 < m ≤ n ≤ 5 × 106,0 ≤ ai ≤ 5。

部分测试点放 n = 的形式,方便选手直接判断是否为对应测试点。

【提示】

如有需要,请使用scanf 读入以及减少使用STL,以降低程序本身带来的常数。