问题 5055 --小 C 的树(tree)

5055: 小 C 的树(tree)

题目描述

  定义:树是一个有 n 个点 n-1 条边的无向连通图,任意两个点间恰有一条简单路径。最末端仅有一条边相连的节点称为叶子。
小 C 家有一个后院,院子的中央种有一棵树。小 C 喜欢在雨后初晴时到院子里观察。这棵参天大树可以抽象成一棵 n 个节点的树,节点从 1 到 n 编号,树的根在 1 号节点。第 i 个节点有一个正整数 ai 表示该处的美感值。
小 C 尤其喜欢观察蚂蚁。这天,小 C 捉来了 m 只蚂蚁。他想挑选树上的 m 个节点,每个节点放上一只蚂蚁。小 C 知道蚂蚁在树上时,会一直朝着根的方向移动,中间会经过一个个节点,最后到达根节点,之后,蚂蚁便到达了地面。
热爱自然的小 C 想知道这 m 只蚂蚁经过的节点的美感值和的最大值是多少,于是请你来帮帮忙。注意经过的节点包括初始节点,且多次访问的节点仅算入一次。

输入

共三行,第一行有两个正整数 n, m,表示树的大小和选取的节点数;
第二行有 n 个非负整数,第 i 个数表示 ai;
第三行有 n - 1 个正整数,第 i 个数 fi 表示节点 i + 1 的父亲节点。保证 0 < fi ≤ i。

输出

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

样例输入输出

输入#1 复制
5 2
1 2 3 1 3
1 1 2 2
输出#1 复制
9
输入#2 复制
10 3
3 4 2 2 3 1 3 3 5 4
1 2 1 1 3 3 2 4 6
输出#2 复制
24

提示

【样例 1 解释】 
这棵树的形态如下图:

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

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

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

【数据范围】

对于所有数据:0 < m ≤ n ≤ 5 × 10^6,0 ≤ ai ≤ 5。
部分测试点放 n = 的形式,方便选手直接判断是否为对应测试点。

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

序号 标题 作者 发表时间 费用 订购数 操作