#P8201. 生活在树上(Living on a Tree)
生活在树上(Living on a Tree)
生活在树上(Living on a Tree)
题目描述
小智生活在「传智国」,这是一个有 个城市的国家,各个城市由 条道路相连。
每个城市都有一个财富指数 ,我们定义,小智从城市 走到城市 的代价是 $\mathrm{dis}_{a, b} = \bigoplus \limits_{u \in \mathrm{path}\left(a, b\right)} w_u$,其中 表示按位异或(如果你不知道什么是按位异或,请参见题目下方的提示/说明), 表示 到 的简单路径上的点集(包括 和 )。也即 表示将 与 的简单路径上所有点写作 后,求 的结果。
有一天,小智获得了去参加传智杯的机会,他在前往比赛地的路上想到了一个问题,但他好像不会做,于是他把这个题告诉了你。聪明的同学,你可以帮帮他吗?
小智说:「由于我们的国家只有 个城市和 条道路,那么我们的国家就相当于是一棵树。我在想,在我们的国家中,是否存在城市满足『到城市 的代价和到城市 的代价的异或等于 』。好难哦,我想不出来,你能帮帮我吗?」
也就是说,给定城市 和整数 ,请你计算是否存在城市 满足 $\mathrm{dis}_{t, a} \bigoplus \mathrm{dis}_{t, b} = k$。
输入格式
第一行有两个整数 ,,表示国家的城市数和询问的个数。
第二行有 个整数 ,表示 号城市的财富指数。
接下来 行,每行有两个整数 ,表示城市 与城市 有一条边相连。
接下来 行,每行有三个整数 ,表示小智从城市 走到城市 , 的含义与题目描述一致。
输出格式
输出共 行。
对于第 个询问,如果存在至少一个城市 满足要求,则输出 Yes。
如果不存在任何一个城市满足条件,则输出 No。
输出字符串大小写不敏感,例如,Yes、yES、YES、yes 等都算作 Yes。
样例输入 #1
5 3
2 6 8 1 5
1 2
1 3
2 4
2 5
1 2 4
2 3 12
2 3 10
样例输出 #1
nO
No
YeS
样例输入 #2
5 10
93 97 100 93 93
2 1
3 2
4 3
5 1
5 2 93
4 1 93
3 2 100
3 2 100
2 3 9999998
1 2 93
2 3 97
1 2 93
2 3 97
4 3 93
样例输出 #2
no
nO
yEs
yEs
No
yEs
yeS
YES
yES
yes
数据范围
相关概念解释
「树」:树是一个有 个结点和 条边的无向简单连通图。
「按位异或」:按位异或是一个二元运算,步骤是将两个数的二进制位按位比较,相同为 ,不同为 。例如:$3 \bigoplus 5 = (011)_2 \bigoplus (101)_2 = (110)_2 = 6$。
样例 1 解释
下图为传智国的地图。
,都不可能有 $\mathrm{dis} _{t,1} \bigoplus \mathrm{dis}_{t, 2} = 4$,$\mathrm{dis}_{t, 2} \bigoplus \mathrm{dis}_{t, 3} = 12$,于是输出 No;
而取 ,有 $\mathrm{dis}_{t, 2} \bigoplus \mathrm{dis}_{t, 3} = 10$,于是输出 Yes。

数据规模与约定
对于所有测试点,保证 ,,。
对于每次询问,保证 且 ,。
提示
- 请注意常数因子对程序效率造成的影响。
- 对于两个 , 可能大于 ,请特别注意这一点。
知识点与难度
本题涉及的知识点从属于 CSP-S,难度(CF Rating):1950。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 n,m≤2000 / 特殊: w_i=0零点权与k=0 / 特殊: dis(a,b)^k > 10^7 越界防数组越界Hack |
| 2 | 9~14 | 中等规模 n,m≤100000 / Hack: 目标权值恰在LCA端点处或仅在树外子树中出现(树外应为No) | |
| 3 | 25 | 15~20 | 大规模 n,m=500000 深度5×10^5长链防爆栈与离线树上差分查询 |
| 4 | 21~25 | 满规模 n,m=500000,w_i≤10^7 综合性能与常数压力测试 |
出处:原题链接