//题意就不说了,题也是个水题,但是值得注意的就是要清空//
#include<stdio.h> #include<string.h> #include<string> #include<algorithm> using namespace std; #include<map> map<string,int>a; const int inf=1<<29; char s1[151],s2[151]; char r1[151],r2[151]; int w[155][155],vis[155],d[155]; int n,m,p; void dij(int st,int ed) { int i,j; memset(vis,0,sizeof(vis)); for(i=st; i<=ed; i++) { d[i]=w[st][i]; } d[st]=0; vis[st]=1; for(i=st; i<=ed; i++) { int now=inf,x; for(j=st; j<=ed; j++) { if(!vis[j]&&d[j]<now) { now=d[j]; x=j; } } vis[x]=1; for(j=st; j<=ed; j++) { if(!vis[j]&&d[j]>d[x]+w[x][j]) { d[j]=d[x]+w[x][j]; } } } } int main() { while(scanf("%d",&n)!=EOF&&n!=-1) { int i,j; for(i=1; i<=152; i++) { for(j=1; j<=152; j++) { if(i==j) { w[i][j]=0; } else { w[i][j]=inf; } } } scanf("%s%s",r1,r2); int ok=1; if(strcmp(r1,r2)==0) { ok=0; } a.clear();//必须清空,不清空,导致map里面的东西越来越多,查的越来越慢 a[r1]=1,a[r2]=2; m=3; for(i=0; i<n; i++) { scanf("%s%s%d",s1,s2,&p); if(!a[s1]) a[s1]=m++; if(!a[s2]) a[s2]=m++; if(p<w[a[s1]][a[s2]]) w[a[s1]][a[s2]]=w[a[s2]][a[s1]]=p; } if(!ok) { printf("0\n"); } else { dij(1,m); if(d[a[r2]]==inf) { printf("-1\n"); } else { printf("%d\n",d[a[r2]]); } } } return 0; }