题目:
#include <bits/stdc++.h>
using namespace std;
const int N=2e5;
int n,m,s;
int e[N],w[N],ne[N],h[N],idx,dis[N],vis[N];
int a[505];
int inf=0x3f3f3f3f;
typedef pair<int,int> pll;
int add(int a,int b,int c)
{
w[idx]=c;
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
void dij()
{
long long ans=inf;
for(int g=1;g<=n;g++)
{
memset(vis,0,sizeof(vis));
memset(dis,inf,sizeof(dis));
dis[g]=0;
priority_queue<pll,vector<pll>,greater<pll>> heap;
heap.push({0,g});
while(heap.size())
{
pll k=heap.top();
heap.pop();
int ver=k.second,dist=k.first;
if(vis[ver]) continue;
vis[ver]=1;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];
if(dis[j]>dist+w[i])
{
dis[j]=dist+w[i];
heap.push({dis[j],j});
}
}
}
long long w=0;
for(int i=1;i<=s;i++)
{
w+=dis[a[i]];
}
ans=min(ans,w);
}
cout<<ans<<endl;
}
int main()
{
cin>>s>>n>>m;
memset(h,-1,sizeof(h));
for(int i=1;i<=s;i++) cin>>a[i];
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
dij();
return 0;
}