袋鼠将军大冒险 (easy version)
题号:NC294828
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题为问题的简单版本,两题的唯一区别在于询问的次数限制。在简单版本中,询问次数为 1 次。

\hspace{15pt}在环扎阿越王国中有 n 个岛屿,岛屿之间一共存在 n - 1双向道路连接。保证任意一条道路连接两个不同的岛屿,任意两个岛屿之间最多存在一条道路,任意两个岛屿之间可以通过道路相互抵达。
\hspace{15pt}袋鼠将军被坎格鲁斯普雷打得落荒而逃,它逃到了编号为 s 的岛屿上,而袋鼠将军希望自己能够到达编号为 x 的岛屿并逃离环扎阿越王国。袋鼠将军可以通过道路在岛屿之间移动,但是,对于任意一条道路,每当袋鼠将军走过这条道路,都会损失一定的能量。袋鼠将军的初始能量为 0
\hspace{15pt}幸运的是,在每个岛屿都存在着一定能量的补给。当袋鼠将军位于某个岛屿时,它都可以立即获得这个岛屿上的补给。但是,每个岛屿上的补给都只能被获取一次
\hspace{15pt}袋鼠将军会给你若干次询问,每次询问都会给定 sx。对于每次询问,请求出袋鼠将军在逃离环扎阿越王国时,最多剩下多少能量?
\hspace{15pt}注意:袋鼠将军在到达编号为 x 的岛屿时,可以选择不立即逃离环扎阿越王国。也就是说,袋鼠将军可以在到达编号为 x 的岛屿后继续移动。但是,袋鼠将军最后必须位于编号为 x 的岛屿。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^4\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\left(2 \leq n \leq 10^5\right),表示岛屿的个数。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \ldots, a_n\left(1 \leq a_i \leq 10^9\right),表示编号为 i 的岛屿上有 a_i 单位的能量。
\hspace{15pt}此后 n - 1 行,第 i 行输入三个整数 u_i, v_i, w_i \big(1 \leq u_i, v_i \leq n; u_i \neq v_i; 1 \leq w_i \leq 10^9\big),表示第 i 条双向道路连接编号为 u_i 的岛屿与编号为 v_i 的岛屿,且每当袋鼠将军走过这条道路,它都会损失 w_i 单位的能量。
\hspace{15pt}n+2 行输入一个整数 q\left(\pmb{q = 1}\right),表示询问的次数。
\hspace{15pt}此后 q 行,第 i 行输入两个整数 s_i, x_i\left(1 \leq s_i, x_i \leq n;\ s_i \neq x_i\right),表示第 i 次询问中,袋鼠将军的起始位置为编号为 s_i 的岛屿,最终需要到达编号为 x_i 的岛屿。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和、q 之和均不超过 10^5。保证任意一条道路连接两个不同的岛屿,任意两个岛屿之间最多存在一条道路,任意两个岛屿之间可以通过道路相互抵达。

输出描述:

\hspace{15pt}对于每组数据,新起一行输出 q 个整数 e_1, e_2, \ldots, e_q,其中第 i 个整数 e_i 表示对于第 i 次询问,袋鼠将军在逃离环扎阿越王国时最多能剩下多少能量。
示例1

输入

复制
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
1
1 4

输出

复制
8
-1

说明

\hspace{15pt}这两个样例中,岛屿的结构一致,如下图所示:



\hspace{15pt}对于第一组测试数据,袋鼠将军可以按照如下路线移动:1 \to 2 \to 3 \to 2 \to 4 \to 2 \to 5 \to 2,袋鼠将军在编号为 1, 2, 3, 4, 5 的岛屿一共可以获得 1 + 2 + 3 + 4 + 5 = 15 单位的能量,而在经过上述路径时,一共损失了 7 单位的能量。需要注意的是,袋鼠将军每经过一次道路,都会损失一定的能量。袋鼠将军通过这种方式,最后剩余的能量为 8。可以证明,这种方式是最优的。

\hspace{15pt}对于第二组测试数据,一种最优的路线是:1 \to 2 \to 5 \to 2 \to 4

备注:

\hspace{15pt}注意:对于 Python 选手,单链的情况可能导致递归爆栈,请注意代码实现。