开始: 2025-07-26 17:50:00

暑假训练赛14【文凯杯】

结束: 2025-07-26 20:40:00
当前  2025-08-03 06:31:34  类型: IOI  状态: 已经结束 

P5. 自由世界
描述

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

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

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

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

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

输入

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

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

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

输出

一行一个整数表示答案。

样例

输入

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

输出

128
提示

对于10%的数据有n\le3,k=0

对于30%的数据有k=0

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

对于60%的数据有n\le 300

对于100% 的数据有1\le n\le 2000,n−1\le m\le 5000,0\le k\le n,1\le u_i, v_i \le n,1\le w_i\le 1000

数据保证给定的小镇两两相互可达。

注意,连接某两个小镇的可能有多条道路,也有可能有道路的两端是同一个小镇。

【样例1 说明】

z一开始在小镇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。

提交

题目参数
时间限制 1 秒
内存限制 128 MB
提交