P8063 [BalkanOI 2012] Shortest paths

题目背景

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

题目描述

你所在的国家有 $n$ 个镇(镇从 $1$ 到 $n$ 编号),$m$ 条双向道路,Bit 镇在 $a$ 点,Hex 镇在 $b$ 点。每条道路有一个长度。你很了解周围的地图,所以找到了两个镇之间的最短路径,而且,决定将这条路径称为幸运路径。 有一天,政府决定在公路上施工,为了维持交通,决定每次只关闭一条道路(关闭后道路不可通行)。 对于这条幸运路径上的每一条道路,你想知道当这条道路正在关闭时从 Bit 镇到 Hex 镇的最短距离。

输入格式

输入的第一行由 4 个整数组成:$n,m,a,b$,分别表示城镇数量,道路数量,Bit 镇编号,Hex 镇编号。 接下来的 $m$ 行,第 $i$ 行包含三个整数 $u_i,v_i,w_i$ :城镇 $u_i$ 和城镇 $v_i$ 由长度为 $w_i$ 的道路连接。 输入的最后一行由数字 $k$ 和 $k$ 个数字组成:$(v_1(=a),v_2,\dots,v_{k}(=b))$ ,表示幸运路径。 $v_i(1\le i\le k)$ 表示幸运路径上的第 $i$ 个点的编号。

输出格式

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

说明/提示

#### 数据范围: Subtask#0 为样例。 $1\le n\le 2000$,$1\le m\le10^5$,$1\le u_i,v_i\le n$,$1\le w_i\le10^5$。 对于 $i\neq j$,满足 $u_i\neq u_j$ 或 $v_i\neq v_j$。 #### 样例解释: ![](https://s4.ax1x.com/2021/12/07/ochxxA.jpg) 封闭道路 $(1,2)$ 后从点 $1$ 的 Bit 镇无法到达点 $5$ 的 Hex 镇。 封闭道路 $(2,3)$ 后从点 $1$ 的 Bit 镇到点 $5$ 的 Hex 镇的最短路为 $1\rightarrow 2\rightarrow5$,长度 $1+100=101$。 封闭道路 $(3,5)$ 后从点 $1$ 的 Bit 镇到点 $5$ 的 Hex 镇的最短路为 $1\rightarrow 2\rightarrow3\rightarrow4\rightarrow5$,长度 $1+3+3+3=10$。