#include<bits/stdc++.h>
using namespace std;
const int maxn=1e+7;
int tim[1005],vis[1005];
int mins[1005][1005];
int connect[1005],want[1005];
int n;
int main()
{
int t,s,d;
int i,j;
while(cin>>t>>s>>d){
n=0;
for(i=0;i<1005;i++){
vis[i]=0;
tim[i]=maxn;
}
for(i=0;i<1005;i++){
for(j=0;j<1005;j++){
mins[i][j] = i==j?0:maxn;
}
}
int a,b,time;
for(i=0;i<t;i++){
scanf("%d%d%d",&a,&b,&time);
n=max(max(n,a),b);
if(mins[a][b]>time) mins[a][b]=mins[b][a]=time;
}
for(i=0;i<s;i++){
scanf("%d",&connect[i]);
mins[0][connect[i]]=mins[connect[i]][0]=0;
}
for(i=0;i<d;i++){
scanf("%d",&want[i]);
}
for(i=0;i<=n;i++){
tim[i]=mins[0][i];
}
vis[0]=1;
for(i=1;i<=n;i++){
int minss=maxn;
int k;
for(j=1;j<=n;j++){
if(vis[j]==0&&tim[j]<minss){
minss=tim[j];
k=j;
}
}
vis[k]=1;
for(j=1;j<=n;j++){
if(vis[j]==0&&tim[j]>tim[k]+mins[k][j]){
tim[j]=tim[k]+mins[k][j];
}
}
}
int mi=maxn;
for(i=0;i<d;i++){
mi=min(tim[want[i]],mi);
}
printf("%d\n",mi);
}
return 0;
}
hdu2066
最新推荐文章于 2022-05-16 14:41:23 发布