击败一个生物可减少治疗药水的冷却时间,让你能更快地再次治疗。 -- 某垃圾游戏
题目描述
给出一棵 n 个点的树,点从 1 至 n 编号。每个点 u 上有足够多瓶加血 wu 的药水,如果原来你的血量为 x,那么喝下这瓶药水后你的血量会变为 x+wu。
有 q 次询问。每次询问给出数 x 与两个点的编号 s、t。
这次询问中,你的初始血量为 x,一开始在 s,想要走到 t。每次走到一个点,你就会喝下这个点上的药水(一开始来到点 s 时会喝下 s 上的药水)。你可以多次经过一个点,每次经过时都会喝下一瓶这个点上的药水。如果某个时刻你的血量小于 0,那么你就死了。你想知道你是否可以在不死的情况下从 s 走到 t。
更形式化地,你需要判断是否存在一个点的编号组成的序列 p1…k,满足:
- p1=s,pk=t;
- 对于任意 i∈[1,k−1],树上的点 pi 与 pi+1 之间有一条边。
- 对于任意 i∈[1,k],有 x+∑ij=1wpj≥0。
p 的长度 k 可以由你决定,并且 p 中可以存在相同的元素。
输入格式
输入的第一行包含两个数 n、q。
第二行包含 n 个数 w1..n。
接下来 n−1 行,每行包含两个数 u、v,表示树中存在连接点 u 与点 v 的一条边。
接下来 q 行,每行包含三个数 x、s、t,表示一组询问,保证 s≠t。
输出格式
输出应包含 q 行,第 i 行包含一个字符串 Yes
或 No
,表示第 i 次询问的答案。
样例
样例输入 1
5 4
-2 0 -4 1 0
1 2
2 3
2 4
1 5
4 3 2
3 3 2
2 5 1
1 5 1
样例输出 1
Yes
No
Yes
No
`
样例 2
见下发文件
数据范围
- 对于 30% 的数据,q≤10。
对于 100% 的数据,1≤n,q≤106,|wi|≤109,0≤x≤1018。