CF2236G Criterion in Burlandia

题目描述

Burlandia 的各个区域形成了一个包含 $n$ 个顶点和 $n-1$ 条边的图,且任意两个顶点之间恰好有一条简单路径。形式上,这些区域形成了一棵树。 每个区域有一个友好度值 $a_i$。 有 $q$ 个查询,每个查询会给出两个分别位于不同区域的朋友。他们想知道,从这两个区域之间路径的所有连续子段中,有多少个“宜人”的子段。 在 Burlandia,衡量关系有两种标准——XOR(异或)与和。若路径上的某个连续子段,包含从区域 $x$ 到区域 $y$ 路径上的若干顶点,且该子段的友好度之和不超过异或值,则称该子段是“宜人”的。 更具体地说,每个询问会给出两个顶点 $x$ 和 $y$($x \neq y$)。设从顶点 $x$ 到顶点 $y$ 的最短路径经过 $v_1, v_2, \ldots, v_k$,其中 $v_1 = x$,$v_k = y$。你需要计算有多少个区间 $[l, r]$ 满足 $1 \leq l \leq r \leq k$,使得: $$ a_{v_l} \oplus a_{v_{l+1}} \oplus \dots \oplus a_{v_r} \geq a_{v_l} + a_{v_{l+1}} + \dots + a_{v_r} $$ 即该路径上从 $v_l$ 到 $v_r$ 形成的连续子段是“宜人”的。

输入格式

每组测试包含多组测试数据。第一行是一个整数 $t$($1 \leq t \leq 10^4$),表示测试数据组数。接下来是每组测试的描述。 每组测试数据的第一行为两个整数 $n$($2 \leq n \leq 10^5$)表示树的顶点数,$q$($1 \leq q \leq 10^5$)表示询问数。 第二行为 $n$ 个非负整数组成的数组,表示各区域的友好度 $a_i$($0 \leq a_i < 2^{20}$)。 接下来 $n-1$ 行,每行两个整数 $u, v$($1 \leq u, v \leq n$),表示树中的一条边。 之后 $q$ 行,每行为两个整数 $x, y$($1 \leq x, y \leq n$,$x \neq y$),表示一次询问,即你需要计算以这两个顶点为端点的路径上“宜人”子段的数量。 保证所有测试数据中 $n$ 的总和不超过 $10^5$,$q$ 的总和不超过 $10^5$,输入的边保证构成一棵树。

输出格式

对于每个查询,输出一行,一个整数表示“宜人”子段的数量。

说明/提示

为方便理解,请参考第三组样例的第三个询问。 从顶点 $2$ 到顶点 $3$ 的路径为 $\{2, 4, 3\}$。 子段 $[2, 3]$ 不满足条件,因为异或值为 $a_4 \oplus a_3 = 4 \oplus 4 = 0$,而和值为 $a_4 + a_3 = 4 + 4 = 8$。 子段 $[1, 3]$ 也不满足条件,因为异或值为 $a_2 \oplus a_4 \oplus a_3 = 2 \oplus 4 \oplus 4 = 2$,而和值为 $a_2 + a_4 + a_3 = 2 + 4 + 4 = 10$。 可以验证,其他 4 个子段均满足条件。 对于每个查询,输出一行答案。 由 ChatGPT 5 翻译