P16435 [APIO 2026 中国赛区] 集宝

题目背景

提交时请选择高于 C++17 的语法标准,不要引入头文件 `gems.h`。

题目描述

第一千届收集宝石大赛开始了! 观众们都厌倦了发生在线性序列上的集宝问题,因此本次大赛相比历届有着明显的创新:参赛选手现在需要在一棵 $n$ 个结点的无根树上收集宝石。 这棵树上一共有 $m$ 颗宝石,其中第 $i$ ($1 \le i \le m$) 颗宝石拥有相应的二元组参数 $(a_i, d_i)$,表示当一名选手当前到达结点 $a_i$ 的简单路径所含边数不超过 $d_i$ 时,他就可以选择立刻收集这颗宝石(当然,也可以选择不收集)。 相应地,本次大赛的选手也热情高涨,总共有 $q$ 名选手报名参赛。对于每名选手,他将会被分配一个出发结点 $x$ 与一个收集宝石的区间 $[l,r]$,他需要完成以下任务:从结点 $x$ 出发,不断选择当前结点的一条邻边并移动过去,依次收集第 $l$ 至第 $r$ 颗宝石,即按照 $l,l+1,\dots,r$ 的顺序收集所有 $r-l+1$ 颗宝石。 因为每名选手在参赛过程中都遇到了或多或少的路线规划难题,为了给出合理的评分,主办方找到了你。请你对每一名选手,计算出该选手完成收集任务所需移动的最小总边数。 ### 【实现细节】 选手不需要,也不应该实现 main 函数。 选手需要确保提交的程序包含头文件 `gems.h`,即在程序开头加入以下代码: ```cpp #include "gems.h" ``` 选手需要在提交的程序源文件 `gems.cpp` 中实现以下两个函数: ```cpp void gems(int c, int n, int m, std::vector u, std::vector v, std::vector a, std::vector d); ``` * $c,n,m$ 分别表示测试点编号、树的结点数与宝石的数量。$c = 0$ 表示该测试点为样例。 * 对于 $0 \le i < n - 1$,$u_i,v_i$ 表示树的一条边。 * 对于 $0 \le i < m$,$a_i,d_i$ 表示第 $i+1$ 颗宝石的两个参数。 * 对于每个测试点,该函数会被交互库调用恰好一次,且在所有 `query` 函数调用之前。 ```cpp long long query(int x, int l, int r); ``` * $x,l,r$ 分别表示一名选手的出发结点与收集宝石的区间。 * 该函数需要返回该选手从结点 $x$ 出发,依次收集第 $l$ 至第 $r$ 颗宝石所需移动的最小总边数。 * 对于每个测试点,该函数会被交互库调用恰好 $q$ 次。 ### 【测试程序方式】 选手可以在本题目录下使用如下命令编译得到可执行程序: ```bash g++ grader.cpp gems.cpp -o gems -O2 -std=c++14 -static ```

输入格式

对于编译得到的可执行程序: * 可执行文件将从标准输入读入以下格式的数据: * 输入的第一行包含三个非负整数 $c,n,m$。 * 输入的第 $1+i$ ($1 \le i \le n-1$) 行包含两个正整数 $u_i, v_i$。 * 输入的第 $n+1$ 行包含 $m$ 个正整数 $a_1, a_2, \dots, a_m$。 * 输入的第 $n+2$ 行包含 $m$ 个非负整数 $d_1, d_2, \dots, d_m$。 * 输入的第 $n+3$ 行包含一个正整数 $q$。 * 输入的第 $n+3+i$ ($1 \le i \le q$) 行包含三个正整数 $x,l,r$。

输出格式

可执行文件将输出以下格式的数据至标准输出: * 输出共 $q$ 行,每行一个非负整数,表示 query 函数的返回值。

说明/提示

### 【样例 1 解释】 对于第一名选手,该选手需要从结点 $2$ 出发,收集第 $2 \sim 4$ 颗宝石。一种可能的收集路径为 $2 \to 1 \to 2 \to 2$,共经过 $2$ 条边。 对于第二名选手,该选手需要从结点 $4$ 出发,收集第 $1 \sim 2$ 颗宝石。一种可能的收集路径为 $4 \to 4 \to 1$,共经过 $2$ 条边。 ### 【数据范围】 对于所有测试数据,均有: * $2 \le n \le 3 \times 10^5, 1 \le m \le 3 \times 10^5$; * 对于所有 $1 \le i \le n-1$,均有 $1 \le u_i,v_i \le n$,且所有的边构成一棵树; * 对于所有 $1 \le i \le m$,均有 $1 \le a_i \le n$ 且 $0 \le d_i \le n$; * $1 \le q \le 5 \times 10^5$; * $1 \le x \le n, 1 \le l \le r \le m$。 ::cute-table{tuack} | 测试点编号 | $n, m \le$ | $q \le$ | 特殊性质 | |:---:|:---:|:---:|:---:| | $1 \sim 3$ | $10^2$ | $10^2$ | 无 | | $4 \sim 7$ | $10^3$ | $10^3$ | ^ | | $8 \sim 10$ | ^ | $3 \times 10^5$ | ^ | | $11, 12$ | $3 \times 10^5$ | $5 \times 10^5$ | A | | $13, 14$ | ^ | ^ | B | | $15 \sim 17$ | ^ | ^ | C | | $18 \sim 21$ | $10^5$ | $3 \times 10^5$ | 无 | | $22 \sim 25$ | $3 \times 10^5$ | $5 \times 10^5$ | ^ | - 特殊性质 A:树的形态是一条链,即不存在度数超过 $2$ 的结点。 - 特殊性质 B:对于所有 $1 \le i \le m$,均有 $d_i \ge n/2$。 - 特殊性质 C:$l = 1$。