310871: CF1902F. Trees and XOR Queries Again
Description
You are given a tree consisting of $n$ vertices. There is an integer written on each vertex; the $i$-th vertex has integer $a_i$ written on it.
You have to process $q$ queries. The $i$-th query consists of three integers $x_i$, $y_i$ and $k_i$. For this query, you have to answer if it is possible to choose a set of vertices $v_1, v_2, \dots, v_m$ (possibly empty) such that:
- every vertex $v_j$ is on the simple path between $x_i$ and $y_i$ (endpoints can be used as well);
- $a_{v_1} \oplus a_{v_2} \oplus \dots \oplus a_{v_m} = k_i$, where $\oplus$ denotes the bitwise XOR operator.
The first line contains one integer $n$ ($2 \le n \le 2 \cdot 10^5$).
The second line contains $n$ integers $a_1, a_2, \dots, a_n$ ($0 \le a_i \le 2^{20} - 1$).
Then $n-1$ lines follow. Each of them contains two integers $u$ and $v$ ($1 \le u, v \le n$; $u \ne v$) denoting an edge of the tree.
The next line contains one integer $q$ ($1 \le q \le 2 \cdot 10^5$) — the number of queries.
Then $q$ lines follow. The $i$-th of them contains three integers $x_i$, $y_i$ and $k_i$ ($1 \le x_i, y_i \le n$; $0 \le k_i \le 2^{20} - 1$).
OutputFor each query, print YES if it is possible to form a set of vertices meeting the constraints. Otherwise, print NO.
You can print each letter in any case.
ExampleInput4 0 1 2 10 2 1 3 2 4 2 8 3 3 0 3 4 1 3 4 7 1 3 1 1 3 2 1 3 10 1 4 10 1 4 11Output
YES YES NO YES YES NO YES YES
Output
给定一个包含n个顶点的树,每个顶点上写有一个整数;第i个顶点上写的是整数a_i。需要处理q个查询,每个查询包含三个整数x_i, y_i和k_i。对于每个查询,要判断是否可以选取一个顶点集合v_1, v_2, …, v_m(可能为空集)满足以下条件:
- 每个顶点v_j都在x_i和y_i之间的简单路径上(端点也可以使用);
- a_{v_1} ⊕ a_{v_2} ⊕ … ⊕ a_{v_m} = k_i,其中⊕表示按位异或运算符。
输入数据格式:
第一行包含一个整数n(2 ≤ n ≤ 2 × 10^5)。
第二行包含n个整数a_1, a_2, …, a_n(0 ≤ a_i ≤ 2^20 - 1)。
接下来n-1行,每行包含两个整数u和v(1 ≤ u, v ≤ n;u ≠ v),表示树的一条边。
下一行包含一个整数q(1 ≤ q ≤ 2 × 10^5)——查询的数量。
接下来q行,每行包含三个整数x_i, y_i和k_i(1 ≤ x_i, y_i ≤ n;0 ≤ k_i ≤ 2^20 - 1)。
输出数据格式:
对于每个查询,如果可以形成一个满足条件的顶点集合,则打印YES,否则打印NO。
每个字母可以以任何大小写形式打印。题目大意: 给定一个包含n个顶点的树,每个顶点上写有一个整数;第i个顶点上写的是整数a_i。需要处理q个查询,每个查询包含三个整数x_i, y_i和k_i。对于每个查询,要判断是否可以选取一个顶点集合v_1, v_2, …, v_m(可能为空集)满足以下条件: - 每个顶点v_j都在x_i和y_i之间的简单路径上(端点也可以使用); - a_{v_1} ⊕ a_{v_2} ⊕ … ⊕ a_{v_m} = k_i,其中⊕表示按位异或运算符。 输入数据格式: 第一行包含一个整数n(2 ≤ n ≤ 2 × 10^5)。 第二行包含n个整数a_1, a_2, …, a_n(0 ≤ a_i ≤ 2^20 - 1)。 接下来n-1行,每行包含两个整数u和v(1 ≤ u, v ≤ n;u ≠ v),表示树的一条边。 下一行包含一个整数q(1 ≤ q ≤ 2 × 10^5)——查询的数量。 接下来q行,每行包含三个整数x_i, y_i和k_i(1 ≤ x_i, y_i ≤ n;0 ≤ k_i ≤ 2^20 - 1)。 输出数据格式: 对于每个查询,如果可以形成一个满足条件的顶点集合,则打印YES,否则打印NO。 每个字母可以以任何大小写形式打印。