#4515. [USACO25OPEN] Ski Slope S

[USACO25OPEN] Ski Slope S

P12027 [USACO25OPEN] Ski Slope S

题目描述

贝茜要和朋友们一起去滑雪。雪山上有 NN 个路标(1≤N≤1051 \leq N \leq 10^5),按海拔从低到高依次标记为 1,2,…,N1, 2, \ldots, N(路标 11 位于山脚)。

对于每个路标 i>1i > 1,有一条从路标 ii 出发,终点为路标 pip_i(1≤pi<i1 \leq p_i < i)的滑雪道。这条滑道的难度为 did_i(0≤di≤1090 \leq d_i \leq 10^9),乐趣值为 eie_i(0≤ei≤1090 \leq e_i \leq 10^9)。

贝茜的 MM 个朋友(1≤M≤1051 \leq M \leq 10^5)每人会进行如下操作:选择一个起始路标 ii,然后沿着滑道向下滑行(依次经过 pi,ppip_i,p_{p_i},依此类推),直到抵达路标 11。

每位朋友获得的乐趣值等于他们经过的所有滑道的乐趣值之和。每个朋友有不同的技能水平 sjs_j(0≤sj≤1090 \leq s_j \leq 10^9)和勇气值 cjc_j(0≤cj≤100 \leq c_j \leq 10),这限制他们选择的起始路标必须满足:滑行过程中最多有 cjc_j 条滑道的难度超过 sjs_j。

请为每位朋友计算他们能获得的最大乐趣值。

输入格式

第一行包含 NN。

接下来 22 到 NN 行,每行包含三个整数 pip_i,did_i 和 eie_i。

随后一行包含 MM。

接下来 MM 行,每行包含两个整数 sjs_j 和 cjc_j。

输出格式

输出 MM 行,每行对应一个朋友的答案。

注意:由于涉及大整数运算,可能需要使用 64 位整数类型(如 C/C++ 中的 long long)。

输入输出样例 #1

输入 #1

4
1 20 200
2 30 300
2 10 100
8
19 0
19 1
19 2
20 0
20 1
20 2
29 0
30 0

输出 #1

0
300
500
300
500
500
300
500

说明/提示

第一位朋友只能选择路标 11 作为起点,因为其他路标都会导致至少经过一条难度超过 1919 的滑道。总乐趣值为 00。

第二位朋友可以选择路标 44,依次滑行至路标 22 和 11。总乐趣值为 100+200=300100 + 200 = 300,其中有一条滑道难度超过 1919。

第三位朋友可以选择路标 33,依次滑行至路标 22 和 11。总乐趣值为 300+200=500300 + 200 = 500,其中有两条滑道难度超过 1919。

  • 测试点 2∼42\sim4:N,M≤1000N, M \leq 1000。
  • 测试点 5∼75\sim7:所有 cj=0c_j = 0。
  • 测试点 8∼178\sim17:无额外限制。