#P8063. [BalkanOI 2012] Shortest paths

[BalkanOI 2012] Shortest paths

题目背景

Bit 镇的你要去 Hex 镇找你的 npy。

题目描述

你所在的国家有 nn 个镇(镇从 11nn 编号),mm 条双向道路,Bit 镇在 aa 点,Hex 镇在 bb 点。每条道路有一个长度。你很了解周围的地图,所以找到了两个镇之间的最短路径,而且,决定将这条路径称为幸运路径。

有一天,政府决定在公路上施工,为了维持交通,决定每次只关闭一条道路(关闭后道路不可通行)。

对于这条幸运路径上的每一条道路,你想知道当这条道路正在关闭时从 Bit 镇到 Hex 镇的最短距离。

输入格式

输入的第一行由 4 个整数组成:n,m,a,bn,m,a,b,分别表示城镇数量,道路数量,Bit 镇编号,Hex 镇编号。

接下来的 mm 行,第 ii 行包含三个整数 ui,vi,wiu_i,v_i,w_i :城镇 uiu_i 和城镇 viv_i 由长度为 wiw_i 的道路连接。

输入的最后一行由数字 kkkk 个数字组成:(v1(=a),v2,,vk(=b))(v_1(=a),v_2,\dots,v_{k}(=b)) ,表示幸运路径。 vi(1ik)v_i(1\le i\le k) 表示幸运路径上的第 ii 个点的编号。

输出格式

输出共 k1k-1 行。

对于每个 t=1k1t=1\dots k-1,输出一行一个整数:道路 (vt,vt+1)(v_t,v_{t+1}) 施工时,Bit 镇和 Hex 镇之间的最短路径的长度。如果路径不存在,则输出 -1

5 6 1 5 
1 2 1 
2 3 3 
2 5 100 
3 4 3 
3 5 5 
4 5 3 
4 1 2 3 5
-1 
101 
10

提示

数据范围:

Subtask#0 为样例。

1n20001\le n\le 20001m1051\le m\le10^51ui,vin1\le u_i,v_i\le n1wi1051\le w_i\le10^5

对于 iji\neq j,满足 uiuju_i\neq u_jvivjv_i\neq v_j

样例解释:

封闭道路 (1,2)(1,2) 后从点 11 的 Bit 镇无法到达点 55 的 Hex 镇。

封闭道路 (2,3)(2,3) 后从点 11 的 Bit 镇到点 55 的 Hex 镇的最短路为 1251\rightarrow 2\rightarrow5,长度 1+100=1011+100=101

封闭道路 (3,5)(3,5) 后从点 11 的 Bit 镇到点 55 的 Hex 镇的最短路为 123451\rightarrow 2\rightarrow3\rightarrow4\rightarrow5,长度 1+3+3+3=101+3+3+3=10