颓红警
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 200 M,其他语言400 M
64bit IO Format: %lld

题目描述

事实证明,小可爱是最可爱的嘤! ——佚名
现在小可爱在颓游戏,但是他遇到了一个问题:

小可爱率领的部队现在面对的是敌军在这一地区的驻军,国战争机器的运作很大程度上依赖指挥,所以军内部是严明分级的,就是说,全部军可以看作一棵树,每只军部队(树上每个节点)有其战斗力。你可以对任意军部队发动进攻,小可爱的部队有战斗力p,意味着他的每次进攻将使得被进攻的这支部队的战斗力减少p,对上级指挥系统的打击同时会影响其下级部队。具体来说,当他对点i发动进攻,部队i的战力减少p的同时,对于其子树内点j,部队j的战力减少Max(0,p−dis(i,j)2)(dis(i,j)表示点i,j间简单路径的长度)。如果某支部队战力小于0,那么这支部队就被消灭了,一支部队被消灭不会改变军编制(即这棵树的结构不会改变)。

小可爱想知道,你的部队最少发动几次进攻,才能全歼

由于小可爱还要爆手速发展自己实力,所以把这个问题交给了你。
小可爱因为太可爱了,所以受到了一些限制——只有在一个部队的祖先节点都被歼灭之后才能发动进攻去打它,否则它就会被这个部队的祖先节点攻击,这是他不愿意经历的。

输入描述:

第一行两个正整数n,p,分别表示德军部队数目和你部战斗力
第二行n个正整数,表示德军各部战斗力mi
第三行到第n+1行,每行两个正整数i,j,表示i,j两支部队存在从属关系(i为j的上级)

输出描述:

输出一个整数,表示最少进攻次数
示例1

输入

复制
7 3
1 1 3 7 5 3 3 
1 2
2 3
1 4
2 5
4 6
1 7

输出

复制
8

说明

对一号、七号部队各发动一次进攻,对三号、四号、五号部队各发动两次进攻

备注:

ps:

1,敌军以一号部队为司令部,即这棵树的根节点为1

2,你不能对已经被消灭的部队发动进攻

提示:

1,本题数据范围差距较大,分层明显

2,本题输入数据较大,请不要使用cin

对于100%的数据,n<=1000000;p,mi<=1e9