6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
9
//yigerendelvxing #include<cstdio> #include<cstring> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; int path[1010][1010]; int t,s,d,n; void floyd() { for(int k=0;k<=n;k++) for(int i=0;i<=n;i++) { if(path[i][k]==INF)//优化 continue; for(int j=0;j<=n;j++) { if(path[i][j]>path[i][k]+path[k][j]) path[i][j]=path[i][k]+path[k][j]; } } } int main() { int a,b,c; int x,y; while(~scanf("%d%d%d",&t,&s,&d)) { n=0; memset(path,INF,sizeof(path)); while(t--) { scanf("%d%d%d",&a,&b,&c); if(n<max(a,b)) n=max(a,b); if(path[a][b]>c) path[a][b]=path[b][a]=c; } for(int i=0;i<s;i++) { scanf("%d",&x); path[0][x]=path[x][0]=0;//把所有起点虚拟为一个起始点 } floyd(); int min=INF; for(int j=0;j<d;j++) { scanf("%d",&y); if(min>path[0][y]) min=path[0][y]; } printf("%d\n",min); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zhenzheni/article/details/47839743