#P6027. Night 的迷宫逃离问题

Night 的迷宫逃离问题

Description

很久很久以前,Night\text{Night} 就发现了一个神奇的迷宫,它位于神话中的冰雾世界,亡灵之国——尼福尔海姆(Niflheimr\text{Niflheimr})之中,传说这个迷宫能反映出人们心中最深的渴望,并赐予成功走到终点(当然你要先穿过 Niflheimr\text{Niflheimr})的勇者一件最适合他自己的神器。

Night\text{Night} 心动了,这样的物品能让他在与 \text{R_rank_Pyramid} 以亿年为单位纷争的平衡中摆脱出来,真正地占到上风。

能抗衡 \text{R_rank_Pyramid}Night\text{Night} 岂是泛泛之辈,Niflheimr\text{Niflheimr} 里英灵的攻击甚至没有 \text{R_rank_Pyramid} 的平时的呼吸,血脉的律动来得更有威力,自然拦不住他。

Night\text{Night} 很快便穿过了亡灵国度,来到了这个迷宫之前。他查阅的资料表明:这个迷宫由 NN 个分叉路口和 MM 条双向的通道构成,每两个分叉路口之间最多只有一条通道,在不同的通道上行走可能需要不同的时间。

这不就是一个水水的最短路吗?Night\text{Night} 很快地对于每个路口,运用了 DFS(Depth-First-Search)\text{DFS(Depth-First-Search)} 算法求出了两两分叉路口之间的最短路(至于为啥 Night\text{Night}DFS\text{DFS} 能跑 100000100000 呢,因为这是偷偷运用 \text{R_rank_Pyramid} 所开发的无敌超算跑出来的),并迅速沿着最短路走到了位于迷宫最深处的 00 号节点。

在迷宫的最深处,Night\text{Night} 发现了无价的宝藏——原初之翼,这可是体现世界真实的传奇物品,他十分兴奋,没有考虑太多便取了下来。

问题大了!Night\text{Night} 由于不够小心,触发了迷宫的防卫装置,如果他没有尽快逃出迷宫,就会被迷宫拖入无尽的时光轮回之中,永远也无法解脱。

在这 NN 个路口里面,Night\text{Night} 知道有 KK 个路口是这个迷宫的出口,他只需要走到这 KK 个路口中的其中一个便可以逃离,避免陷入可怕的轮回。

Night\text{Night} 不慌不忙地沿着他之前所求出的最短路走过去,但是这迷宫的防卫装置岂会如此简单,他不仅会让你如果没有快速逃脱便把你拖入无尽的时光轮回之中,还能封锁你前进的路线,让你无法逃脱,最终陷入轮回。

幸好,Night\text{Night} 多年对抗 \text{R_rank_Pyramid} 的实力使得他能够对路线的封锁进行一定的影响,让它在任意时刻只能堵住一个通道,给 Night\text{Night} 创造生机。换句话说,每当一条路被封堵住时,另一条路就会打开。

Night\text{Night} 的逃生过程可以形式化地描述如下:每次他试图离开一个路口时,迷宫都会封闭一条连接该路口的通道。Night\text{Night} 只能选择没有被封闭的通道走到下一个路口。一旦 Night\text{Night} 进入一条通道,在她到达该通道的另一端前,迷宫便不能封闭这条通道。当 Night\text{Night} 到达下一个路口,迷宫就会选择再封闭一条通道(可以是 Night\text{Night} 刚刚走过的那条通道)。

Night\text{Night} 需要设计一个逃生计划,确切地说,她希望有一系列指令告诉他如何逃离这个迷宫。

xx 是一个路口,如果 xx 是出口,Night\text{Night} 可以直接逃生。否则,对路口 Night\text{Night},指令是下列形式中的一种:

\bullet 在路口 xx,优先选择一条通道到路口 yy。如果该通道被封堵,则选择另一通道去路口 zz

\bullet 不用考虑路口 xx,按照逃生计划不会到达 xx

注意:数据保证不管迷宫如何封闭通道,总能找到一个好的逃生计划保证 Night\text{Night} 在有限时间内可以到达一个出口。

在所有逃生计划中,在最坏情况下用时最短的逃生计划所用的时间定义为 TT

按照套路 Night\text{Night} 当然知道怎么逃生,但是他懒得计算,便打算考一考你,如果你能帮他算出正确的 TT,那么 Night\text{Night} 就会考虑在邪恶的 \text{R_rank_Pyramid} 找你麻烦的时候保住你一次。

Input Format

第一行三个整数 N,M,KN,M,K,含义如题目所示,以空格隔开。

接下来 MM 行每行三个整数 U,V,WU,V,W,依次表示一条无向通道的两端和长度,以空格隔开。

接下来 KK 个整数以空格隔开,表示哪些分叉路口是出口。

Output Format

一个整数,为 Night\text{Night} 在最坏情况下用时最短的逃生计划所用的时间。

Sample

输入样例:

13 12 9
0 1 1
0 2 4
0 3 11
1 4 11
1 5 7
1 6 15
2 7 3
2 8 13
2 9 23
3 10 3
3 11 1
3 12 2
4 5 6 7 8 9 10 11 12

输出样例:

13

Hint

子任务 11 (19 pts19\ pts) 具有如下性质:

\bullet 3N10003\le N\le 1000

\bullet 这个神奇的迷宫是一个树形的结构,意味着 M=N1M = N-1 且对于每一对路口 (i,j)(i,j) 都存在唯一的路径从 iijj

\bullet 每个出口都和且只和另一个路口连接。

\bullet 对于其它的路口,都和另外恰好三个或更多的路口连接。

子任务 22 (23 pts23\ pts) 具有如下性质:

\bullet 3N1000003\le N\le 100000

\bullet 这个神奇的迷宫是一个树形的结构,意味着 M=N1M = N-1 且对于每一对路口 (i,j)(i,j) 都存在唯一的路径从 iijj

子任务 33 (31 pts31\ pts) 具有如下性质:

\bullet 3N10003 \le N \le 1000

\bullet 2M1000002 \le M \le 100000

子任务 44 (27 pts27\ pts) 具有如下性质:

\bullet 3N1000003 \le N \le 100000

\bullet 2M10000002 \le M \le 1000000