每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入一个整数
,表示岛屿的个数。
第二行输入
个整数
,表示编号为
的岛屿上有
单位的能量。
此后
行,第
行输入三个整数
![]()
![]()
![]()
,表示第
条双向道路连接编号为
的岛屿与编号为
的岛屿,且每当袋鼠将军走过这条道路,它都会损失
单位的能量。
第
行输入一个整数
,表示询问的次数。
此后
行,第
行输入两个整数
,表示第
次询问中,袋鼠将军的起始位置为编号为
的岛屿,最终需要到达编号为
的岛屿。
除此之外,保证单个测试文件的
之和、
之和均不超过
。保证任意一条道路连接两个不同的岛屿,任意两个岛屿之间最多存在一条道路,任意两个岛屿之间可以通过道路相互抵达。
对于每组数据,新起一行输出
个整数
,其中第
个整数
表示对于第
次询问,袋鼠将军在逃离环扎阿越王国时最多能剩下多少能量。
2 5 1 2 3 4 5 1 2 1 2 3 1 2 4 1 2 5 1 1 1 2 5 1 2 3 4 5 1 2 1 2 3 100 2 4 10 2 5 1 3 1 4 2 4 1 5
这两个样例中,岛屿的结构一致,如下图所示:
对于第一组测试数据,袋鼠将军可以按照如下路线移动:
,袋鼠将军在编号为
,
,
,
,
的岛屿一共可以获得
单位的能量,而在经过上述路径时,一共损失了
单位的能量。需要注意的是,袋鼠将军每经过一次道路,都会损失一定的能量。袋鼠将军通过这种方式,最后剩余的能量为
。可以证明,这种方式是最优的。
对于第二组测试数据的第一次询问,一种最优的路线是:
;第三次询问中,一种最优的路线是:
。
注意:对于 Python 选手,单链的情况可能导致递归爆栈,请注意代码实现。