9511.一个更无聊的游戏

Time Limit: 3s Memory Limit: 512MB

Kagari 还清楚地记得,她当年第一次出题的时候,看到了一个很无聊的游戏,于是把这个游戏出成了一道题出到了比赛里面。

现在已经过去了不知道多少年了,这个游戏也越来越复杂,也越来越无聊,于是她又把这个游戏出到了比赛里面。

具体来说,在游戏里有一棵 $n$ 个节点的树,在树上的每个节点都有一个敌人,其中在节点 $i$ 的敌人的等级为 $a_i$,击败这个敌人能获得的经验值为 $b_i$。在这个游戏里有 $q$ 个关卡,关卡之间互不影响,但每关的树和所有敌人的属性都是一模一样的。对于每个关卡,你会操控一个角色,初始出生在树上的节点 $x$,初始等级为 $y$。你可以操控这个角色,每次沿着当前所在的点走到某个邻居节点,角色可以无限次操作,每当角色在这关第一次移动到某个节点 $u$ 的时候,会和这个节点的敌人进行战斗,如果角色当前等级 $now_y \geq a_u$,那么你的角色胜利,角色等级 $now_y$ 增加 $b_u$,否则输掉,这个关卡结束。特殊地,游戏开始的时候也要先和出生点的敌人进行战斗。最后关卡结束的时候的角色等级就是这个关卡的得分。

当然 Kagari 肯定想要自己的得分尽量高,所以她希望知道在每个关卡能得到的最大得分是多少。

Input Format(From the terminal/stdin)

第一行一个正整数 $T$,表示数据组数。

对于每组数据:

第一行输入两个正整数 $n,q$($1\le n,q\le 10^5$),意义如上。

接下来一行 $n$ 个整数 $a_1,a_2,\ldots ,a_n$($0\le a_i\le 10^{12}$),表示每个点的敌人等级。

接下来一行 $n$ 个整数 $b_1,b_2,\ldots ,b_n$($0\le b_i\le 10^{12}$),表示击败每个点的敌人可以获得的经验值。

接下来 $n-1$ 行每行两个整数 $u,v$($1\le u,v\le n,u\neq v$),表示树上有一条连接点 $u,v$ 的边,保证所有边构成一棵树。

接下来 $q$ 行,每行两个整数 $x,y$($1\le x\le n,0\le y\le 10^{12}$),表示一个出生点在 $x$,初始等级为 $y$ 的关卡。

保证所有数据的 $n$ 之和,$q$ 之和都不超过 $5\times 10^5$。

Output Format(To the terminal/stdout)

对于每组数据,对于每个关卡,输出一行一个整数表示在这个关卡能得到的最大分数。

Sample Input

Copy
1
7 5
14 14 6 11 5 3 9
3 14 7 12 2 6 13
2 1
3 1
4 2
5 3
6 2
7 4
1 5
2 11
6 8
3 13
6 7 \n
 · \n
  ·  · ·  · · · \n
 ·  · ·  · · ·  \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 ·  \n
 · \n
 ·  \n
 · \n

Sample Output

Copy
5
11
65
70
13 \n
  \n
  \n
  \n
  \n
Source: 2025“钉耙编程”中国大学生算法设计暑期联赛(5), HDU, 8027

Submit

请先 登录

© 2025 FAQs