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 29 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

他很快发现树上的每个节点 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 个问题。

## 输出格式

按顺序输出问题 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。