T755684 [ICPC 2017 Hong Kong R] Card collection
#include<iostream>
using namespace std;
const int INF=0x7fffff;
int m;
int p_o,p_t;
int dis[55];
int cheak[55];
int graph[55][55];
int main(){
while(cin>>m){
if(m=='\n') break;
for(int i=1;i<=m;i++){
dis[i]=INF;
}
cin>>p_o>>p_t;
int a,b,c;
while(cin>>a){
if(a==0) break;
cin>>b>>c;
graph[a][b]=c;
graph[b][a]=c;
}
dis[p_o]=0;
for(int i=1;i<=m;i++){
int mi=INF,mx;
for(int j=1;j<=m;j++){
if(dis[j]<mi&&cheak[j]==0){
mi=dis[j];
mx=j;
}
}
cheak[mx]=1;
for(int j=1;j<=m;j++){
if(graph[mx][j]>0){
if(mi+graph[mx][j]<dis[j]){
dis[j]=mi+graph[mx][j];
}
}
}
}
cout<<dis[p_t]<<endl;
for(int i=1;i<=50;i++){
dis[i]=0;
cheak[i]=0;
}
for(int i=1;i<=50;i++){
for(int j=1;j<=50;j++){
graph[i][j]=0;
}
}
}
return 0;
}