exercises.md 2.0 KB
Newer Older
CSDN问答's avatar
CSDN问答 已提交
1
# 小张的手速大比拼
CSDN问答's avatar
CSDN问答 已提交
2

CSDN问答's avatar
CSDN问答 已提交
3
在很久很久以前,小张找到了一颗有 N 个节点的有根树 T 。 树上的节点编号在 1 到 N 范围内。
CSDN问答's avatar
CSDN问答 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

他很快发现树上的每个节点 i 都有一个对应的整数值 V[i]。

一个老爷爷对他说,给你一个整数 X, 如果你能回答我的 M 个问题,他就给张浩扬购买一些零食。

对于每个问题 Q[i], 请你找到 在 T 中以节点 Q[i] 为根的子树中的所有节点(包括 Q[i])中, 有没有两个节点 A, B (A != B) 的值 V[A] ^ V[B] 的异或和为 X。

如果有这样的两个节点, 请你输出 YES。

否则你需要输出 NO 表示没有节点符合上面的条件。

## 输入描述

第一行包含三个整数 N (2 <= N <= 100000), X (0 <= X <= 1000000000),M(1 <= M <= N) , 表示树上节点的数量 和 老爷爷给的数 X 和 老爷爷的问题数量。

第二行包含 N 个数, 第 1 个数代表节点 1 的父节点, 第 2 个数代表节点 2 的父节点, 以此类推。

题目保证输入是一颗合法的有根树, 如果第 i 个数为 -1 表示 节点 i 没有父节点。

第三行包含 N 个数, 第 1 个数代表节点 1 的值 V[1], 第 2 个数代表节点 2 的值 V[2], 以此类推。

题目保证对于每一个下标1 <= i <= N 都有 0 <= V[i] <= 1000000000。

接下来有 M 行, 每一行包括一个整数Q[i] (1 <= Q[i] <= N), 代表老爷爷问张浩扬的第 i 个问题。

CSDN问答's avatar
CSDN问答 已提交
29
## 输出描述
CSDN问答's avatar
CSDN问答 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

按顺序输出问题 Q[1], Q[2] ... Q[M] 的答案, 每个答案占一行。

## 输入用例

4 2 3

-1 1 1 2

4 3 2 1

1

3

4

## 输出用例

YES

NO

NO

## 提示

第一个用例给出的树是

                1(4)
          2(3)         3(2)
    4(1)

括号左边的数为节点编号, 括号内的数为节点值。

对于第一个测试用例的第一个问题, 显然有节点 4 与 节点 2 的值 (1 ^ 3) == 2。

对于第一个测试用例的第二个问题, 以节点 3 为根的子树里只有 3 一个节点 并没有一对节点满足 A != B 且 (V[A] ^ V[B]) == 2。