#314. 迷宫密室

迷宫密室

题目背景

在古老的阿玛兰斯城下,皇宫之下延伸着一座庞大的迷宫。这个迷宫由 nn 个密室和 mm 条神秘通道组成。每条通道都有一个二进制状态的神秘封印:w{0,1}w \in \{0, 1\},其中 w=0w = 0 表示通道被封印,不可通过,而 w=1w = 1 表示通道是开放的,可以通过。

在其中 kk 个密室中,有神秘的杠杆 sis_i,这些杠杆可以同时控制所有通道的封印。

你的冒险从密室 11 开始,最终目标是到达传说中的密室 nn。从每个密室出发,你有两种可能的行动:

  1. 移动到相邻的密室,前提是连接的通道是开放的。
  2. 通过激活附近的杠杆来切换所有通道,从而反转它们的封印:被封印的通道(w=0w = 0)变为开放(w=1w = 1),反之亦然。

你的任务是确定是否能到达密室 nn,如果可以,找出所需的最少移动次数。

输入格式

第一行包含三个整数 n,m,kn, m, k

接下来的 mm 行,每行包含三个整数 ui,vi,wiu_i, v_i, w_i,表示密室 uiu_iviv_i 之间带有初始状态 wiw_i 的神秘通道。

最后一行包含 kk 个整数,表示有杠杆的密室位置。

输出格式

如果密室 nn 不可达,则输出 1-1。否则,输出从密室 11 到密室 nn 所需的最少移动次数。

样例

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

数据范围

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 1M2×1051 \leq M \leq 2 \times 10^5
  • 0KN0 \leq K \leq N
  • 1ui,viN1 \leq u_i, v_i \leq N
  • uiviu_i \neq v_i
  • ai{0,1}a_i \in \lbrace 0, 1\rbrace
  • 1s1<s2<<sKN1 \leq s_1 \lt s_2 \lt \cdots \lt s_K \leq N