小红闯地下城
题号:NC282917
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

已知地下城是树形结构,一共有n个房间,n-1条双向通路。入口和出口都在1号房间,每个房间有1只怪物,小红进入房间后必须先击杀怪物。
每个房间有一个通往其他房间的单向传送阵。小红可以使用最多1次传送。
当小红通过道路或者传送阵移动到其他房间时,将消耗1点体力。击杀1只怪物同样也需要1点体力。
小红初始有x点体力。她想知道,最多可以击杀多少只怪物?
请注意,小红最终必须回到1号房间离开地下城。击杀的怪物不能复生。

输入描述:

第一行输入两个正整数n,x,用空格隔开,分别代表房间的数量和小红的初始体力。
第二行输入n个正整数a_i,代表每个房间的传送阵通向的房间编号。
接下来的n-1行,每行输入两个正整数u,v,代表房间u和房间v有一条通路。
1\leq n \leq 200000
1\leq a_i,u,v \leq n
1 \leq x \leq 1000000

输出描述:

一个整数,代表小红可以击杀的怪物最大数量。
示例1

输入

复制
3 2
2 3 1
1 2
2 3

输出

复制
1

说明

小红只有2点体力,她首先击杀1号房间的怪物,消耗1点体力,然后就什么都做不了了(如果离开1号房间就回不来了)。

示例2

输入

复制
3 6
1 3 1
1 2
1 3

输出

复制
3

说明

小红安排体力的流程如下:
击杀1号房间怪物,消耗1体力。
移动到2号房间,消耗1体力。
击杀2号房间怪物,消耗1体力。
传送到3号房间,消耗1体力。
击杀3号房间怪物,消耗1体力。
移动到1号房间,消耗1体力。