9153 - 灾后重建(rebuild)

通过次数

12

提交次数

36

时间限制 : 1 秒
内存限制 : 512 MB

2023年5月2日23时27分在云南保山市隆阳区发生5.2级地震,地震过后对村庄、城市等都造成了一定的损毁,现在需要对受灾地区进行灾后重建工作。
村庄之间的公路为双向车道且完好无损,只有村庄受到损毁。每个村庄受损程度不一样,因此重建时间也不相同,所有受损村庄都从0时刻开始重建。某地区共有n个村庄,村庄之间共有m条长度不一的公路。村庄从0到 n-1编号,第i个村庄重建完成的时间为t_i。若t_i = 0 则说明此村庄未受损。
给定q个询问(x,y,d),对于每个询问,你要回答在第d天,从村庄x到村庄y的最短路径长度为多少。只有重建完成的村庄才可到达或者作为中转站点。如果无法在第d天找到从村庄x到村庄y的路径,则返回-1。

输入

从文件rebuild.in中读入数据。
第一行包含两个正整数n和m,表示村庄的数目和公路的条数。
第二行包含n个非负整数t0⋯⋯t(n-1),分别表示第0个到第n-1个村庄重建所需时间。
接下来m行,每行3个非负整数(i,j,w),w为不超过1000的正整数,表示村庄i与村庄j (i!=j)有一条长度为w的道路。
第m+3行为一个正整数q,表示有q个询问。接下来的q行,每行3个非负整数(x,y,d),询问在第d天,从村庄x到村庄y的最短路径长度为多少。
数据范围
对于 20% 的数据,n≤200,m≤100。
对于 100% 的数据,n≤200,m≤10^4。

输出

输出到文件rebuild.out中。
共q行,对每一个询问(x,y,d) 输出对应的答案。

样例

输入

4 5
1 2 3 4
0 2 1
2 3 1
3 1 2
2 1 4
0 3 5
4
2 0 2
0 1 2
0 1 3
0 1 4

输出

-1
-1
5
4

来源

云南编程挑战赛