#joi2016yoe. [joi2016yo_e]ゾンビ島 (Zombie Island)
[joi2016yo_e]ゾンビ島 (Zombie Island)
问题
JOI 君所居住的岛屿已经被僵尸入侵。JOI 君决定逃到作为岛上最安全避难所设定的庇护所。
JOI 君所居住的岛屿由 个城镇(编号从 到 )组成,并且城镇与城镇之间通过道路连接。岛上共有 条道路,每条道路连接两个不同的城镇。JOI 君可以自由地在道路上双向行驶,但无法通过道路以外的路径从一个城镇到另一个城镇。
一些城镇已经被僵尸占领,无法访问。从被僵尸占领的城镇出发,通过 条以下的道路可以到达的城镇被称为危险城镇,其他城镇被称为安全城镇。
JOI 君的家在城镇 ,庇护所在城镇 。城镇 和城镇 都没有被僵尸占领。由于岛上的道路行驶耗时较长,JOI 君每次移动到另一个城镇都需要在目的地城镇过夜。如果 JOI 君选择在安全城镇过夜,他会选择价格较低的旅馆,价格为 日元。如果选择在危险城镇过夜,他会选择安全服务较好的高级旅馆,价格为 日元。JOI 君希望尽可能地减少过夜费用,并成功逃到城镇 。不需要在城镇 或城镇 过夜。
请你求出 JOI 君从城镇 移动到城镇 所需的最小过夜费用总和。
输入
输入由 行组成。
第 行包含 个整数 ,以空格分隔 (,,,)。这些数表示岛屿由 个城镇和 条道路组成,其中 个城镇被僵尸占领,通过 条以下的道路可达的城镇被称为危险城镇。
第 行包含 个整数 ,以空格分隔 ()。这些数表示 JOI 君在安全城镇过夜时的费用为 日元,在危险城镇过夜时的费用为 日元。
接下来的 行中,第 行 () 包含一个整数 (),表示城镇 被僵尸占领。保证 两两不相同。
接下来的 行中,第 行 () 包含 个整数 ,以空格分隔 (),表示城镇 和城镇 之间存在一条道路。保证没有重复的 对。
保证在给定的输入数据中,从城镇 到城镇 的路径只通过安全城镇。
输出
输出 JOI 君从城镇 移动到城镇 所需的最小过夜费用总和,以一行输出。
请注意,输出结果可能超过 位有符号整数的范围。
输入样例 1
13 21 1 1
1000 6000
7
1 2
3 7
2 4
5 8
8 9
2 5
3 4
4 7
9 10
10 11
5 9
7 12
3 6
4 5
1 3
11 12
6 7
8 11
6 13
7 8
12 13
输出样例 1
11000
输入样例 对应如下图所示。圆表示城镇,线表示道路。
在这个例子中,城镇 ,城镇 ,城镇 ,城镇 和城镇 是危险城镇。
按照以下顺序移动城镇可以使过夜费用总和最小:
- 从城镇 移动到城镇 。在城镇 过夜,费用为 日元。
- 从城镇 移动到城镇 。在城镇 过夜,费用为 日元。
- 从城镇 移动到城镇 。在城镇 过夜,费用为 日元。
- 从城镇 移动到城镇 。在城镇 过夜,费用为 日元。
- 从城镇 移动到城镇 。在城镇