#P0420. 星际漫游

星际漫游

题目描述

在遥远的宇宙深处,有一个由古老文明建造的星际水晶网络。这个网络由无数的水晶节点(顶点)和它们之间的水晶通道(边)构成,是连接整个星系的关键。每个节点都有可能拥有一个神秘的装置——水晶开关(开关),能够控制通道的能量流动。

在一次探险中,你发现了这个星际水晶网络,并得知在网络的另一端隐藏着一个传说中的宝物——水晶之心,它拥有无尽的能量。作为一名星际探险家,你决定踏上寻找水晶之心的旅程。

你从网络的起始节点(11 号点)出发,目标是到达网络的终点(nn 号点)。网络中的每条水晶通道都有两个状态:激活(通行可能)和未激活(通行不能)。你可以通过步行(移动)或使用水晶开关(按开关)来改变通道的状态。

  1. 移动:你可以移动到相邻的节点,前提是通道是激活状态。
  2. 按开关:如果当前节点有水晶开关,你可以激活它,这将反转所有通道的状态。

你的任务是确定是否能够到达 nn 号点,并计算出最少需要步行的次数。能够到达N号点,并计算出最少需要步行的次数。

输入描述

第一行三个数 n, m, kn,\ m,\ k

接下来 mm 行,每行三个数 ui, vi, wiu_i,\ v_i,\ w_i 表示一条连接 uiu_iviv_i 的边。wi=0w_i=0 代表无法通过,wi=1w_i=1 代表可以通过。

最后一行 kk 个数,表示按钮的位置。

输出描述

如果无法到达,输出 1-1。否则输出最少移动次数。

样例

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

样例解释

  1. 从顶点 11 移动到顶点 22
  2. 从顶点 22 移动到顶点 33
  3. 在顶点 33 按下开关。这会反转图中每条边的可通行性。
  4. 从顶点 33 移动到顶点 11
  5. 从顶点 11 移动到顶点 44
  6. 在顶点 44 按下开关。这再次反转图中每条边的可通行性。
  7. 从顶点 44 移动到顶点 55

数据范围

2n2×1052 \le n \le 2 \times 10^51m2×1051 \le m \le 2 \times 10^51kn1 \le k \le n

保证 1ui, vin1 \le u_i,\ v_i \le n,且 uiviu_i \ne v_i

保证 1s1<s2<<skn1 \le s_1 < s_2 < \cdots < s_k \le n