时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld
题目描述
小强玩的游戏中有一个技能树系统。
技能树是一棵
以
号节点为根节点的树,树上的每个节点均为一个技能。小强可以使用金币点亮技能树上的技能以获取战斗力。
点亮一个技能的前提是点亮它父节点上的技能。
特别地,根节点可以被直接点亮。
每个技能有一个战力值,小强每点亮一个技能获得的
战斗力计算方法如下:
-
将从根节点到该技能的路径上所有技能(包括根节点和该技能)的战力值从小到大排序。
-
排序后,第
小的战力值即为小强点亮该技能获得的战斗力。(其中
为从根节点到该技能的路径上所有技能的数量 )
与此同时,小强每点亮一个技能需要一枚金币,且技能不能被重复点亮。小强可以不使用完这

枚金币。
小强现在有

枚金币,他希望能够通过这

枚金币最大化他获得的
战斗力。
输入描述:
首先输入一行两个整数
,分别表示技能树上技能的数量和小强拥有的金币个数。
接下来输入一行
个整数,
,其中
表示编号为
的技能的战力值。
接下来
行,每行输入两个整数
,表示编号为
的技能和编号为
的技能之间有一条边。
输出描述:
输出一行一个整数,表示小强可以获取的最大的\textbf{战斗力}。
示例1
输入
复制
5 3
1 2 3 4 5
1 2
1 3
2 4
2 5
示例3
输入
复制
5 3
1 2 3 4 5
1 2
2 3
3 4
4 5