数据泄露
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

埃万雇佣莱斯特团队为他收集泄露的数据。地图中共有n个点,其中有k个数据分别在不同的点上,需要依次收集。莱斯特团队开始在1号点上,求收集数据需要走的最短路程。

输入描述:

第一行为两个整数   ),表示点的个数和边的个数。

接下来m行,每行包括三个正整数,表示从a_ib_i之间有一条长度为s_i的边。

之后是一个正整数,表示需要收集的数据的个数。

下一行为k个整数的数组p,表示数据所在点的下标。

输出描述:

输出一个正整数,表示最短路程。如果最短路程不存在,则输出-1
示例1

输入

复制
5 6
1 2 5
1 3 1
3 4 10
1 4 6
2 5 6
5 4 2
5
3 1 5 4 1

输出

复制
18