添加链接描述
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e+7;
int mins[1005][1005];
int vis[1005],tim[1005];
int n,m,s;
void dij(int st){
for(int i=1;i<=n;i++){
vis[i]=0;
tim[i]=mins[st][i];
}
vis[st]=1;
for(int i=1;i<=n;i++){
int minss=maxn;
int k;
for(int j=1;j<=n;j++){
if(!vis[j]&&tim[j]<minss){
k=j;
minss=tim[j];
}
}
if(minss==maxn) return;
vis[k]=1;
for(int j=1;j<=n;j++){
if(!vis[j]&&tim[k]+mins[k][j]<tim[j])
tim[j]=tim[k]+mins[k][j];
}
}
}
int main()
{
while(scanf("%d%d%d",&n,&m,&s)!=EOF){
for(int i=1;i<=1005;i++){
for(int j=1;j<=1005;j++){
mins[i][j]=mins[j][i]=maxn;
}
}
int p,q,t;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&p,&q,&t);
if(mins[q][p]>t) mins[q][p]=t;
}
dij(s);
int w;
scanf("%d",&w);
int mi=maxn;
for(int i=0;i<w;i++){
int j;
scanf("%d",&j);
if(tim[j]<mi) mi=tim[j];
}
if(mi==maxn) cout<<-1<<endl;
else cout<<mi<<endl;
}
return 0;
}