CF1388C Uncle Bogdan and Country Happiness
题目描述
Bogdan 叔叔在 Flint 船长的船员中已经很久了,有时会怀念自己的祖国。今天他向你讲述了他的国家如何引入幸福指数。
这个国家有 $n$ 个城市,城市之间有 $n-1$ 条无向道路连接。任意城市的居民都可以通过这些道路到达其他任何城市。城市编号为 $1$ 到 $n$,其中 $1$ 号城市是首都。换句话说,这个国家的城市结构是一棵树。
全国共有 $m$ 个公民。第 $i$ 个城市有 $p_i$ 个居民,但他们都在首都工作。傍晚时分,所有公民都会通过最短路径返回自己的家乡城市。
每个人都有自己的心情:有的人下班时心情很好,有的人已经心情不好了。此外,任何人在回家途中都有可能心情变坏。如果某人心情变坏了,就不会再变好。
每个城市都安装了幸福检测器,用于监测每位到访者的幸福情况。第 $i$ 个城市的检测器会计算幸福指数 $h_i$,即心情好的人数减去心情不好的人数。为简单起见,假设人在城市内心情不会变化。
幸福检测器还在开发中,因此判断某人幸福与否时可能会出错。一天深夜,当所有公民都顺利回到家后,政府请 Bogdan 叔叔(全国最好的程序员)检查收集到的幸福指数是否正确。
Bogdan 叔叔顺利解决了这个问题。你能做到吗?
更正式地说,你需要判断:“是否存在一种可能,使得所有人回到家后,每个城市 $i$ 的幸福指数恰好等于 $h_i$”。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10000$),表示测试用例数量。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 10^5$,$0 \le m \le 10^9$),分别表示城市数和公民数。
每个测试用例的第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$($0 \le p_i \le m$,$p_1 + p_2 + \ldots + p_n = m$),其中 $p_i$ 表示第 $i$ 个城市的居民数。
第三行包含 $n$ 个整数 $h_1, h_2, \ldots, h_n$($-10^9 \le h_i \le 10^9$),其中 $h_i$ 表示第 $i$ 个城市的幸福指数。
接下来 $n-1$ 行,每行包含两个整数 $x_i$ 和 $y_i$($1 \le x_i, y_i \le n$,$x_i \neq y_i$),表示第 $i$ 条道路连接的两个城市。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,若收集到的数据是正确的,输出 YES,否则输出 NO。YES 或 NO 的大小写均可。
说明/提示
我们来看第一个样例的第一个测试用例:

一开始,所有公民都在首都。我们描述一种可能的情形:
- 来自城市 $1$ 的人:他住在首都,心情很好;
- 来自城市 $4$ 的人:他经过城市 $1$ 和 $4$,在 $1$ 和 $4$ 之间心情变坏;
- 来自城市 $3$ 的人:他经过城市 $1$ 和 $3$,心情一直很好;
- 来自城市 $6$ 的人:他经过城市 $1$、$3$ 和 $6$,在 $1$ 和 $3$ 之间心情变坏;
最终,$h_1 = 4 - 0 = 4$,
$h_2 = 0$,
$h_3 = 1 - 1 = 0$,
$h_4 = 0 - 1 = -1$,
$h_5 = 0$,
$h_6 = 0 - 1 = -1$,
$h_7 = 0$。
第一个测试用例的第二种情况:

所有人都在首都时就已经心情不好——这是唯一可能的情况。
第二组测试用例的第一个情况:

第二组测试用例的第二个情况:

可以证明,对于第二组测试用例的这两种情况,都无法实现给定的幸福指数。
由 ChatGPT 4.1 翻译