CF1788F XOR, Tree, and Queries

题目描述

给定一棵有 $n$ 个顶点的树,顶点编号为 $1$ 到 $n$。 你需要为每条边分配一个权值。第 $i$ 条边的权值为 $a_i$($1 \leq i \leq n-1$)。每条边的权值必须是 $0$ 到 $2^{30}-1$ 之间的整数(包含两端)。 你还会得到 $q$ 个条件。每个条件由三个整数 $u$、$v$ 和 $x$ 组成,表示从 $u$ 到 $v$ 的最短路径上所有边的权值的按位异或(bitwise XOR)为 $x$。 请判断是否存在一组 $a_1, a_2, \ldots, a_{n-1}$ 满足所有给定条件。如果存在,请输出一组解,使得 $a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}$ 的值最小。这里,$\oplus$ 表示按位异或操作。 如果有多组解使得 $a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}$ 最小,输出任意一组即可。

输入格式

第一行包含两个整数 $n$ 和 $q$($2 \le n \le 2.5 \cdot 10^5$,$0 \le q \le 2.5 \cdot 10^5$)。 接下来的 $n-1$ 行,每行包含两个整数 $x_i$ 和 $y_i$($1 \le x_i, y_i \le n$,$x_i \neq y_i$),表示第 $i$ 条边连接顶点 $x_i$ 和 $y_i$。 保证给定的边构成一棵树。 接下来的 $q$ 行,每行包含三个整数 $u$、$v$ 和 $x$($1 \le u, v \le n$,$u \neq v$,$0 \le x \le 2^{30}-1$),表示从 $u$ 到 $v$ 的最短路径上所有边的权值的按位异或为 $x$。

输出格式

如果不存在满足条件的 $a_1, a_2, \ldots, a_{n-1}$,输出 "No"。 否则,第一行输出 "Yes"。 第二行输出 $n-1$ 个整数,第 $i$ 个整数为第 $i$ 条边的权值。如果有多组解满足条件且 $a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}$ 最小,输出任意一组即可。 输出 "Yes" 或 "No" 时,大小写不敏感。例如,"yEs"、"yes"、"Yes"、"YES" 都会被识别为肯定回答。

说明/提示

对于第一个样例,不存在一组边权满足所有条件。 对于第二个样例,两个条件分别为 $a_1 \oplus a_2 \oplus a_3=2$ 和 $a_4 \oplus a_5=7$。存在多组解,例如 $(a_1, a_2, a_3, a_4, a_5)=(1, 2, 1, 4, 3)$。 对于第三个样例,两个条件分别为 $a_1 \oplus a_2 \oplus a_3=3$ 和 $a_1 \oplus a_4 \oplus a_5=5$。存在多组解满足条件。 $(a_1, a_2, a_3, a_4, a_5)=(1, 1, 3, 4, 0)$ 满足条件,但所有边权的异或和为 $7$,不是最小的 $a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}$,因此不能作为答案。 由 ChatGPT 4.1 翻译