TLE*2,看了题解的
#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int N=3e6+15,mod=998244353;
int n,p,c;
int a[N];
int head[N],to[N*2],val[N*2],nxt[N*2],idx=1;
int dis[N],vis[N];
void add(int u,int v,int w){
to[idx]=v;
val[idx]=w;
nxt[idx]=head[u];
head[u]=idx++;
}
void spfa(int x){
queue<int>q;
memset(vis,0,sizeof vis);
rep(i,1,p){
dis[i]=0x3f3f3f3f;
}
q.push(x);
dis[x]=0;
vis[x]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=nxt[i]){
if(dis[to[i]]>val[i]+dis[u]){
dis[to[i]]=val[i]+dis[u];
if(!vis[to[i]]){
q.push(to[i]);
vis[to[i]]=1;
}
}
}
}
}
signed main(){
ios::sync_with_stdio(0);
memset(head,-1,sizeof head);
cin>>n>>p>>c;
rep(i,1,n)cin>>a[i];
rep(i,1,c){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
rep(i,1,c){
add(0,i,0);
add(i,0,0);
}
int minx=1e18;
rep(i,1,p){
spfa(i);
int ans=0;
rep(j,1,n){
ans+=dis[a[j]];
}
minx=min(minx,ans);
}
cout<<minx<<endl;
return 0;
}