标签:
#include <iostream> #include <cmath> #include <cstring> #include <algorithm> using namespace std; const int INF=999999999; int t,s,d,n,xiao,a,b,ans,node; int map[1002][1002],dist[1002]; bool visit[1002]; void chu() { for(int i=0;i<=1000;i++) for(int j=0;j<=1000;j++) { if(i==j) map[i][j]=0; else map[i][j]=map[j][i]=INF; } } void Dijkstr() { memset(visit,false,sizeof(visit)); for(int i=0;i<=n;i++) dist[i]=INF; dist[0]=0; for(int i=0;i<=n;i++) { xiao=INF; for(int j=0;j<=n;j++) if(visit[j]==false&&dist[j]<=xiao) { xiao=dist[j]; node=j; } if(xiao==INF) break; visit[node]=true; for(int j=0;j<=n;j++) if(visit[j]==false&&dist[j]>dist[node]+map[node][j]) dist[j]=dist[node]+map[node][j]; } } int main() { int vi,vj,w; while(cin>>t>>s>>d) { ans=INF; chu(); while(t--) { cin>>vi>>vj>>w; n=max(max(vi,vj),n); if(w<map[vi][vj]) map[vi][vj]=map[vj][vi]=w; } while(s--) { cin>>a; map[0][a]=map[a][0]=0; } Dijkstr(); while(d--) { cin>>b; ans=min(ans,dist[b]); } cout<<ans<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/nefu929831238/p/5370371.html