rt,不要在意马蜂
#include<bits/stdc++.h>
using namespace std;
struct Edge
{
int to,dis;
};
int dis[114514],vis[114514],n,p,c,minn=1145141919,pasture[114514];
vector<Edge>vec[114514];
void spfa(int start)
{
queue<int>q;
memset(vis,0,sizeof(vis));
for(int i=1;i<=p;++i)dis[i]=1145141919;
q.push(start),dis[start]=0,vis[start]=1;
while(!q.empty())
{
int u=q.front();
q.pop(),vis[u]=0;
for(int i=0;i<vec[u].size();++i)
{
if(dis[u]+vec[u][i].dis<dis[vec[u][i].to])
{
dis[vec[u][i].to]=dis[u]+vec[u][i].dis;
if(!vis[vec[u][i].to])q.push(vec[u][i].to),vis[vec[u][i].to]=1;
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&p,&c);
for(int i=1;i<=n;++i)scanf("%d",&pasture[i]);
for(int i=1,u,v,w;i<=c;++i)scanf("%d%d%d",&u,&v,&w),vec[i].push_back({v,w}),vec[i].push_back({u,w});
for(int i=1;i<=p;++i)
{
spfa(i);
int sum=0;
for(int j=1;j<=n;++j)sum+=dis[pasture[j]];
minn=min(minn,sum);
}
printf("%d",minn);
}