QOJ.ac

QOJ

実行時間制限: 10 s メモリ制限: 256 MB 満点: 100

#23849. 僵尸岛

統計

JOI 君居住的岛屿被僵尸侵略了。JOI 君决定逃往岛上被设定为最安全避难场所的避难所。

JOI 君居住的岛屿由编号为城镇 $1$ 到城镇 $N$ 的 $N$ 个城镇组成,城镇与城镇之间由道路连接。岛上有 $M$ 条道路,每条道路连接 $2$ 个不同的城镇。JOI 君可以在道路上双向自由移动,但不能通过道路以外的途径从一个城镇前往另一个城镇。

有若干个城镇被僵尸控制了,无法造访。从被僵尸控制的城镇出发使用不超过 $S$ 条道路即可到达的城镇称为危险城镇。其余的城镇称为非危险城镇。

JOI 君的家在城镇 $1$,避难的目的地避难所在城镇 $N$。城镇 $1$ 和城镇 $N$ 没有被僵尸控制。由于在岛上的道路上移动很耗费时间,JOI 君每次移动到另一个城镇时,都必须在目的地城镇住宿一晚。JOI 君在非危险城镇住宿时,会住在住宿费为 $P$ 日元的廉价旅馆;而在危险城镇住宿时,会住在安保服务优良、住宿费为 $Q$ 日元的高级旅馆。JOI 君希望尽可能使住宿费便宜地移动并避难到城镇 $N$。在城镇 $1$ 和城镇 $N$ 不需要住宿。

求 JOI 君从城镇 $1$ 移动到城镇 $N$ 所需的总住宿费的最小值。

输入格式

输入由 $2 + K + M$ 行组成。

第 $1$ 行包含 $4$ 个以空格分隔的整数 $N, M, K, S$ ($2 \le N \le 100000$, $1 \le M \le 200000$, $0 \le K \le N - 2$, $0 \le S \le 100000$)。这表示岛屿由 $N$ 个城镇和 $M$ 条道路组成,$N$ 个城镇中有 $K$ 个城镇被僵尸控制,且从被僵尸控制的城镇出发使用不超过 $S$ 条道路即可到达的城镇称为危险城镇。

第 $2$ 行包含 $2$ 个以空格分隔的整数 $P, Q$ ($1 \le P < Q \le 100000$)。这表示 JOI 君在非危险城镇住在住宿费为 $P$ 日元的旅馆,在危险城镇住在住宿费为 $Q$ 日元的旅馆。

接下来的 $K$ 行中的第 $i$ 行 ($1 \le i \le K$) 包含整数 $C_i$ ($2 \le C_i \le N - 1$)。这表示城镇 $C_i$ 被僵尸控制。$C_1, \dots, C_K$ 互不相同。

接下来的 $M$ 行中的第 $j$ 行 ($1 \le j \le M$) 包含 $2$ 个以空格分隔的整数 $A_j, B_j$ ($1 \le A_j < B_j \le N$)。这表示城镇 $A_j$ 与城镇 $B_j$ 之间存在一条道路。相同的 $(A_j, B_j)$ 组合不会出现 $2$ 次或以上。

在给定的输入数据中,保证可以仅经过未被僵尸控制的城镇从城镇 $1$ 移动到城镇 $N$。

输出格式

在一行中输出 JOI 君从城镇 $1$ 移动到城镇 $N$ 所需的总住宿费的最小值(共 $1$ 行)。

请注意,输出结果不一定在 $32$ 位有符号整数的范围内。

样例

样例输入 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

样例解释 1

样例 $1$ 对应下图。圆圈表示城镇,线段表示道路。

problem_23849_bac2d8f5a931b2ef74845a3e75798198.png

在这种情况下,城镇 $3$、城镇 $4$、城镇 $6$、城镇 $8$、城镇 $12$ 是危险城镇。

按照如下顺序在城镇间移动,可以使总住宿费最小:

  • 从城镇 $1$ 前往城镇 $2$。在城镇 $2$ 住宿在住宿费为 $1000$ 日元的廉价旅馆。
  • 从城镇 $2$ 前往城镇 $5$。在城镇 $5$ 住宿在住宿费为 $1000$ 日元的廉价旅馆。
  • 从城镇 $5$ 前往城镇 $9$。在城镇 $9$ 住宿在住宿费为 $1000$ 日元的廉价旅馆。
  • 从城镇 $9$ 前往城镇 $10$。在城镇 $10$ 住宿在住宿费为 $1000$ 日元的廉价旅馆。
  • 从城镇 $10$ 前往城镇 $11$。在城镇 $11$ 住宿在住宿费为 $1000$ 日元的廉价旅馆。
  • 从城镇 $11$ 前往城镇 $12$。在城镇 $12$ 住宿在住宿费为 $6000$ 日元的高级旅馆。
  • 从城镇 $12$ 前往城镇 $13$。在城镇 $13$ 不住宿。

当 JOI 君沿此路线移动时,总住宿费为 $11000$ 日元,因此输出 $11000$。

样例输入 2

21 26 2 2
1000 2000
5
16
1 2
1 3
1 10
2 5
3 4
4 6
5 8
6 7
7 9
8 10
9 10
9 11
11 13
12 13
12 15
13 14
13 16
14 17
15 16
15 18
16 17
16 19
17 20
18 19
19 20
19 21

样例输出 2

15000

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.