#CF1788F. 异或、树与查询

    ID: 6190 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 2 上传者: 标签>线性代数位运算搜索DFS数据结构并查集贪心数论图结构其他构造树结构*2500

异或、树与查询

F. 异或、树与查询

时间限制:每个测试点 33
内存限制256256 MB


题目描述

你有一棵包含 nn 个顶点的树,顶点编号为 11nn

你需要为每条边分配一个权值。设第 ii 条边的权值为 aia_i1in11 \le i \le n-1)。每条边的权值应当是一个介于 0023012^{30}-1 之间的整数。

你将得到 qq 个条件。每个条件包含三个整数 uuvvxx。这意味着从 uuvv 的最短路径上所有边的异或和应为 xx

请判断是否存在满足所有条件的 a1,a2,,an1a_1, a_2, \ldots, a_{n-1}。若存在,请输出一组解,使得 a1a2an1a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1} 最小。此处 \oplus 表示按位异或运算。

若有多组解使得 a1a2an1a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1} 最小,输出任意一组即可。


输入格式

第一行包含两个整数 nnqq2n2.5×1052 \le n \le 2.5 \times 10^50q2.5×1050 \le q \le 2.5 \times 10^5)。

接下来的 n1n-1 行中,第 ii 行包含两个整数 xix_iyiy_i1xi,yin1 \le x_i, y_i \le nxiyix_i \neq y_i),表示第 ii 条边连接顶点 xix_iyiy_i

输入保证给出的边构成一棵树。

接下来的 qq 行包含条件信息。

每行包含三个整数 uuvvxx1u,vn1 \le u, v \le nuvu \neq v0x23010 \le x \le 2^{30}-1),表示从 uuvv 的最短路径上所有边的异或和应为 xx


输出格式

如果不存在满足所有条件的 a1,a2,,an1a_1, a_2, \ldots, a_{n-1},则输出 "No"

否则,第一行输出 "Yes"

第二行输出 n1n-1 个整数,其中第 ii 个整数为第 ii 条边的权值。如果存在多组满足条件的解,请输出使得 a1a2an1a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1} 最小的解。

若有多组解使得 a1a2an1a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1} 最小,输出任意一组。

输出 "Yes""No" 时,大小写任意。例如,"yEs""yes""Yes""YES" 均会被识别为肯定回答。


样例

样例输入 1

4 4
1 2
2 3
3 4
1 4 3
2 4 2
1 3 1
2 3 1

样例输出 1

No

样例输入 2

6 2
1 2
2 3
3 4
2 5
5 6
1 4 2
2 6 7

样例输出 2

Yes
4 2 4 1 6

样例输入 3

6 2
1 2
2 3
3 4
2 5
5 6
1 4 3
1 6 5

样例输出 3

Yes
6 1 4 3 0

样例说明

第一个样例:不存在满足所有条件的边权集合。

第二个样例:两个条件分别是 a1a2a3=2a_1 \oplus a_2 \oplus a_3 = 2a4a5=7a_4 \oplus a_5 = 7。可能有多组解,例如 (a1,a2,a3,a4,a5)=(1,2,1,4,3)(a_1, a_2, a_3, a_4, a_5) = (1, 2, 1, 4, 3)

第三个样例:两个条件分别是 a1a2a3=3a_1 \oplus a_2 \oplus a_3 = 3a1a4a5=5a_1 \oplus a_4 \oplus a_5 = 5。存在多组满足条件的解。
(a1,a2,a3,a4,a5)=(1,1,3,4,0)(a_1, a_2, a_3, a_4, a_5) = (1, 1, 3, 4, 0) 满足条件,但所有边权的异或和为 77,不是最小的 a1a2an1a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1},因此不能作为答案。