#P13579. [CCPC 2024 重庆站] 沙堆
[CCPC 2024 重庆站] 沙堆
题目背景
本题目来自仓库 https://github.com/Disposrestfully/CCPC-CQ-2024/tree/main
题目描述
给定一棵 个点的无向树。初始每个点 有点权 。考察如下操作:
- 设 为点 的度数。若存在一个点 满足 ,则选择任意一个满足该条件的点 ,将 减去 并将 的所有邻居的权值加 。
称一个点权序列 为终态当且仅当以上操作无法进行,即所有点 均满足 。
可以证明,对于任意无向树和点权序列,只有以下两种可能的情况:
- 无论如何操作,在有限次操作之后都会得到终态,且任意操作均会得到同一个终态。
- 无论如何操作,都无法在有限次操作后得到终态。
你需要判断给定的初始状态属于以上哪一种情况。如果属于第一种情况,则你需要给出任意进行操作能够得到的唯一的终态。
输入格式
输入的第一行包含一个正整数 表示树的点数。
接下来 行每行两个整数 表示树的一条边。
接下来一行 个整数 表示初始点权。
输出格式
如果在有限次操作内无法到达终态,输出 -1
,否则输出一行 个整数,依次描述终态每个点的点权。
6
1 2
2 3
2 4
1 5
4 6
1 1 0 0 1 1
1 2 0 1 0 0
12
1 2
1 3
2 4
3 5
5 6
2 7
7 8
4 9
8 10
5 11
3 12
2 0 0 0 1 0 1 0 1 1 0 1
0 1 2 1 1 0 1 1 0 0 0 0
40
1 2
2 3
1 4
3 5
5 6
6 7
4 8
6 9
8 10
6 11
6 12
9 13
10 14
7 15
9 16
15 17
15 18
12 19
18 20
16 21
18 22
22 23
5 24
22 25
2 26
24 27
14 28
27 29
20 30
29 31
30 32
20 33
26 34
26 35
19 36
11 37
34 38
37 39
29 40
3 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 0 0 1 1 3 0 1 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 2 1
1 1 0 1 0 4 1 0 2 0 1 0 0 0 0 1 0 2 1 1 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0
提示
考察以下操作序列:
- 对 进行操作,得到点权序列 ;
- 对 进行操作,得到点权序列 ;
- 对 进行操作,得到点权序列 ;
- 对 进行操作,得到点权序列 。
而点权序列 是终态,故输出 1 2 0 1 0 0
。