#1335. 自由世界

自由世界

**题目描述 **

牛牛最近在玩某款游戏,其地图不能看成一个平面直角坐标系,而类似于一张无向图。

地图上存在 n 个小镇,小镇从 1 到 n 编号。有 m 条道路连接两个小镇,每条道路有其长度wi。

牛牛在 k 个小镇建立了传送门,也就是说,牛牛可以在任何时候任何瞬间不花费任何代价,直接到达这 k 个小镇的任何一个。

牛牛一开始在小镇 1,牛牛想按 1 到 n 的顺序访问所有小镇按顺序做任务,问牛牛需要走过的最短长度是多少。

牛牛可以提前到达某个小镇,但是必须做完前一个小镇的任务,才能做下一个小镇的任务。做任务本身不会增加长度。

输入格式

第一行输入三个整数 n,m,k,表示地图上小镇的数目,连接小镇道路的条数和建立了传送门的小镇的个数。

随后 m 行,其中第 i 行输入三个整数ui,vi,wi,表示有一条道路连接了小镇ui和小vi,长度为wi。

随后一行输入 k 个整数,表示建立了传送门的小镇编号。

对于10%的数据有n<=3,k=0。

对于30%的数据有 k=0。

另有30%的数据有 m=n-1。

对于60%的数据有 n<=300。

对 于 100% 的数据有1<=n<=2000,n-1<=m<=5000,0<=k<=n,1<=ui,vi<=n,1<=wi<=1000。

数据保证给定的小镇两两相互可达。 注意,连接某两个小镇的可能有多条道路,也有可能有道路的两端是同一个小镇。

输出格式

一行一个整数表示答案。

样例 1 输入

5 6 1
1 4 9
1 3 66
3 2 27
4 2 10
2 5 62
3 5 92
3

样例 1 输出

128

样例 1 说明

牛牛一开始在小镇 1,完成任务后,步行至小镇 4,随后步行至小镇 2,共计长度 9+10=19。

完成任务后,传送至小镇 3。

从小镇 3 完成任务后,步行至小镇 2,再步行至小镇 4,这里长度为 27+10=37,共计长度为 37+19=56。

然后从小镇 4 完成任务后步行至小镇 2, 然后步行至小镇 5,这里长度为10+62=72,共计长度为 56+72=128。

共计长度为 128。