[R33D]树加减
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
时空限制
1S/512M
题目描述
给定一棵包含 个节点的有根树,根节点为 。每个节点 都有一个整数点权 。
你可以执行下面操作不超过 次:
- 选择两个节点 和 ,其中 必须是 的祖先且 的点权为正 (), 的点权为负 ()。
- 选择一个正值 (),并更新点权:,(即 减去 , 加上 )。
你的任务是判断是否存在一系列操作,使得所有节点的点权都变为 。
如果存在,输出 YES
,并给出一种具体的操作方案。注意:你给出的操作次数不能超过 。
如果不存在,输出 NO
。
格式
输入格式
第一行包含一个整数 ,表示节点的数量。
第二行包含 个整数 ,表示每个节点的初始点权。
接下来 行,每行包含两个整数 ,表示树上的一条边。
输出格式
如果无解,输出一行 NO
。
如果有解,则第一行输出 YES
,接下来输出你的操作方案:
首先输出一个整数 ,表示你的总操作次数。
接下来 行,每行输出三个整数 ,表示一次操作。变量的具体意义见题目描述。
你需要保证操作次数 且每次的 均满足 。
样例
样例输入 #1
4
10 -5 -5 0
1 2
1 3
2 4
样例输出 #1
YES
2
1 2 5
1 3 5
样例解释 #1
初始点权为 。
- 执行操作 :节点 是节点 的祖先,,。
- 当前点权变为 。
- 执行操作 :节点 是节点 的祖先,,。
- 当前点权变为 。
所有点权都变为 ,且操作次数为 ,不超过 。这是一个合法的方案。
数据规模
对于 的数据,。
对于 的数据,,,保证 。
代码源挑战赛 Round 33
- Status
- Done
- Rule
- DMY
- Start at
- 2025-10-10 20:00
- End at
- 2025-10-10 21:30
- Duration
- 1.5 hour(s)
- Host
- Partic.
- 377