#CF2236G. 布尔兰迪亚准则

    ID: 18574 传统题 2000ms 512MiB 尝试: 0 已通过: 0 显示难度暂无评定 上传者: 标签>CodeforcesCodeforces Round 1103 (Div. 3)

布尔兰迪亚准则

题目描述

布兰迪亚的区域构成了一幅图,包含 nn 个顶点和 n1n-1 条边,且任意两个顶点之间有且仅有一条路径。形式化地说,这些区域构成了一棵树。

每个区域有一个友好值 aia_i

现有 qq 次查询。每次查询给出两个位于不同区域的朋友。他们想知道这两个区域之间的路径上有多少个子段是友好的。

已知在布兰迪亚,评估关系有两个标准——XOR 与和。路径的一段子段,包含从区域 xx 到区域 yy 路径上的若干顶点,如果 它非空,并且该子段上友好值的和不超过其 XOR,则称该子段是友好的。

更形式化地说,对于每次查询,给定两个顶点 xxyy (xy)(x \neq y)。考虑树中从顶点 xx 到顶点 yy 的最短路径。设顶点 v1,v2,,vkv_1, v_2, \ldots, v_k 构成这条路径,其中 v1=xv_1 = x, vk=yv_k = y。你需要找出该路径上满足以下条件的子段数量:

$$a_{v_{l}} \oplus a_{v_{l+1}} \oplus \ldots \oplus a_{v_{r}} \geq (a_{v_{l}} + a_{v_{l+1}} + \ldots + a_{v_{r}}),$$

其中 1lrk1 \leq l \leq r \leq k 为路径上从 xxyy 的顶点子段的边界。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 tt1t1041 \leq t \leq 10^4)——测试用例的数量。随后是每个测试用例的描述。

每个测试用例的第一行包含整数 nn2n1052 \leq n \leq 10^5)——树中顶点的数量,以及 qq1q1051 \leq q \leq 10^5)——查询的数量。

第二行包含一个由 nn 个非负整数组成的数组——区域的友好度值(0ai<2200 \leq a_i \lt 2^{20})。

接下来的 n1n-1 行描述树的边:每行包含整数 u,vu, v1u,vn1 \leq u, v \leq n)——一条边。

随后是 qq 行描述查询。每个查询由整数 x,yx, y 给出(1x,yn1 \leq x, y \leq n, xyx \neq y)——定义路径的顶点,你需要计算该路径上友好子段的数量。

保证所有测试用例中 nn 的总和以及 qq 的总和不超过 10510^5,并且这些边确实构成一棵树。

输出格式

对于每个查询,在单独的一行输出一个答案。

样例

3
4 3
0 0 4 1
1 2
1 3
1 4
1 4
2 3
2 4
4 3
0 4 1 2
1 3
1 4
2 4
1 2
2 3
2 4
4 3
3 2 4 4
1 2
2 4
3 4
1 2
1 3
2 3
3
6
6
6
10
3
2
5
4