#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
namespace zty
{
const int N = 3000010;
bool m1;
bool st[N];
int T, n, m, k;
int h[N], e[N], w[N], ne[N], idx, d1[N], d2[N];
bool m2;
void add(int a, int b, int c)
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}
void dijkstra(int d[], int s)
{
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
memset(st, 0, sizeof st);
q.push({0, s}), d[s] = 0;
while (q.size())
{
pair<int, int> t = q.top();q.pop();
int u = t.second, dis = t.first;
if (st[u]) continue;
st[u] = 1;
for (int i = h[u] ; ~i ; i = ne[i])
{
int j = e[i];
if (d[j] > dis + w[i])
{
d[j] = dis + w[i];
q.push({d[j], j});
}
}
}
}
inline int max(int a, int b)
{
return a > b ? a : b;
}
inline int min(int a, int b)
{
return a > b ? b : a;
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//cout << fixed << setprecision(3) << (&m2 - &m1) / 1024.0 / 1024 << endl;
cin >> T;
while (T --)
{
cin >> n >> m >> k;
memset(d1, 0x3f, sizeof d1), memset(d2, 0x3f, sizeof d2), memset(h, -1, sizeof h), idx = 0;
rep(i, 1, k)
{
int x;
cin >> x;
add(x, x + n, 0);
}
rep(i, 1, n) add(i + n, i, 0);
rep(i, 1, m)
{
int a, b, c;
cin >> a >> b >> c;
add(a, b, c), add(b, a, c);
add(a + n, b + n, c >> 1), add(b + n, a + n, c >> 1);
}
dijkstra(d1, 1), dijkstra(d2, n);
int ans = 1e18;
rep(i, 1, n << 1)
ans = min(ans, max(d1[i], d2[i]));
if (ans > 1e13) cout << -1 << endl;
else cout << ans << endl;
}
return 0;
}
}
signed main()
{
zty::main();
}
复杂度我感觉是 nlogn 的吧,为什么会TLE