1.Dijkstra
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N=555; 5 int d[N]; 6 bool vis[N]; 7 const int INF=0x3f3f3f3f; 8 vector < pair<int,int> > E[N]; 9 10 void init(){ 11 for(int i=0;i<N;i++) E[i].clear(); 12 for(int i=0;i<N;i++) d[i]=INF,vis[i]=0; 13 } 14 15 void dijkstra(int st){ 16 priority_queue < pair<int,int> > Q; 17 d[st]=0; 18 Q.push(make_pair(0,st)); 19 while(!Q.empty()){ 20 int now=Q.top().second;Q.pop(); 21 vis[now]=1; 22 for(int i=0;i<E[now].size();i++){ 23 int u=E[now][i].first; 24 int D=E[now][i].second; 25 if(vis[u]) continue; 26 if(d[u]>max(D,d[now])){ 27 d[u]=max(D,d[now]); 28 Q.push(make_pair(-d[u],u)); 29 } 30 } 31 } 32 } 33 34 int main(){ 35 int t,n,m; 36 scanf("%d",&t); 37 for(int k=1;k<=t;k++){ 38 init(); 39 scanf("%d%d",&n,&m); 40 int u,v,w,st; 41 for(int i=1;i<=m;i++){ 42 scanf("%d%d%d",&u,&v,&w); 43 E[u].push_back(make_pair(v,w)); 44 E[v].push_back(make_pair(u,w)); 45 } 46 scanf("%d",&st); 47 dijkstra(st); 48 printf("Case %d:\n",k); 49 for(int i=0;i<n;i++){ 50 if(d[i]==INF) printf("Impossible\n"); 51 else printf("%d\n",d[i]); 52 } 53 } 54 return 0; 55 }