自己写的,写注释是为了方便各位大佬理解qwq
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int M=5e5+10;
int n,m,tot,s,c,head[N];
int cow[1500],sum[N];
struct edge {
int to, w,nxt;
} e[M];
inline void add(int u,int v,int w) {
e[++tot].to = v ;
e[tot].w = w ;
e[tot].nxt = head[u] ;
head[u] = tot ;
}
int main() {
//first距离 second点号
cin>>c>>n>>m;
for(int i=1; i<=c; i++)cin>>cow[i];
for(int i=1; i<=m; i++) {
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
for(s=1; s<=n; s++) {
priority_queue< pair<int ,int> >q;//dijkstra
bool v[N];
int d[N];
for(int i=1; i<=n; i++)
d[i]=0x3f3f3f3f;
d[s]=0;
q.push(make_pair(0,s));
while(q.size()) {
int u=q.top().second;
q.pop();
if(v[u]) continue;
v[u] = 1 ;
for(int i=head[u]; i!=0; i=e[i].nxt) {
int v=e[i].to,w=e[i].w;
if(d[v] > d[u] + w) {
d[v] = d[u] + w;
q.push(make_pair(-d[v],v));
}
}
}
for(int j=1; j<=c; j++)//累加
sum[j]+=d[cow[j]];
}
// for(int j=1; j<=c; j++)
// cout<<sum[j]<<' ';
int minn=98244353;
for(int i=1; i<=c; i++)
if(minn>sum[i])
minn=sum[i];
cout<<minn;
return 0;
}