时空限制
1S/512M
题目描述
给定一棵包含 n 个节点的有根树,根节点为 1。每个节点 i 都有一个整数点权 ai。
你可以执行下面操作不超过 n 次:
- 选择两个节点 u 和 v,其中 u 必须是 v 的祖先且 u 的点权为正 (au>0),v 的点权为负 (av<0)。
- 选择一个正值 x (1≤x≤au),并更新点权:au←au−x,av←av+x(即 au 减去 x,av 加上 x)。
你的任务是判断是否存在一系列操作,使得所有节点的点权都变为 0。
如果存在,输出 YES
,并给出一种具体的操作方案。注意:你给出的操作次数不能超过 n。
如果不存在,输出 NO
。
格式
输入格式
第一行包含一个整数 n,表示节点的数量。
第二行包含 n 个整数 a1,a2,…,an,表示每个节点的初始点权。
接下来 n−1 行,每行包含两个整数 u,v,表示树上的一条边。
输出格式
如果无解,输出一行 NO
。
如果有解,则第一行输出 YES
,接下来输出你的操作方案:
首先输出一个整数 k,表示你的总操作次数。
接下来 k 行,每行输出三个整数 u,v,x,表示一次操作。变量的具体意义见题目描述。
你需要保证操作次数 k≤n 且每次的 x 均满足 x≤au。
样例
样例输入 #1
4
10 -5 -5 0
1 2
1 3
2 4
样例输出 #1
YES
2
1 2 5
1 3 5
样例解释 #1
初始点权为 [10,−5,−5,0]。
- 执行操作 (1,2,5):节点 1 是节点 2 的祖先,a1=10>0,a2=−5<0。
- a1←10−5=5
- a2←−5+5=0
- 当前点权变为 [5,0,−5,0]。
- 执行操作 (1,3,5):节点 1 是节点 3 的祖先,a1=5>0,a3=−5<0。
- a1←5−5=0
- a3←−5+5=0
- 当前点权变为 [0,0,0,0]。
所有点权都变为 0,且操作次数为 2,不超过 n=4。这是一个合法的方案。
数据规模
对于 40% 的数据,1≤n≤1000。
对于 100% 的数据,1≤n≤2×105,−109≤ai≤109,保证 ∑i=1nai=0。