hdu 2112

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int inf = 0x3f3f3f3f;
 6 int map1[155][155];
 7 int n;
 8 int d[155];
 9 bool vis[155];
10 void dij(int x, int y)
11 {
12     for(int i=1; i<=y; i++)
13     {
14         d[i]=(i==1?0:inf);
15     }
16     memset(vis, 0, sizeof(vis));
17     for(int i=1; i<=y; i++)
18     {
19         int u, mini=inf;
20         for(int j=1; j<=y; j++)
21         {
22             if(!vis[j]&&d[j]<mini)
23             {
24                 mini=d[u=j];
25             }
26         }
27         vis[u]=1;
28         if(mini==inf) break;
29         for(int v=1; v<=y; v++)
30         {
31             if(d[u]+map1[u][v] < d[v])
32             {
33                 d[v]=d[u]+map1[u][v];
34             }
35         }
36     }
37 }
38 int main()
39 {
40     while(scanf("%d", &n)!=EOF)
41     {
42         if(n==-1) break;
43         bool Y=0;
44         for(int i=0; i<155; i++)
45         {
46             for(int j=0; j<155; j++)
47                 map1[i][j]=(i==j?0:inf);
48         }
49 
50         char s1[35], s2[35];
51         scanf("%s%s", s1, s2);
52         if(strcmp(s1, s2)==0) Y=1;
53         map<string, int> rel;
54         rel[s1]=1;
55         rel[s2]=2;
56         int temp=3;
57 
58         for(int i=0; i<n; i++)
59         {
60             int d1;
61             char s3[35], s4[35];
62             scanf("%s%s%d", s3, s4, &d1);
63             if(!rel[s3]) rel[s3]=temp++;
64             if(!rel[s4]) rel[s4]=temp++;
65             map1[rel[s3]][rel[s4]]=map1[rel[s4]][rel[s3]]=d1;
66         }
67         if(Y) {printf("0\n"); continue;}
68 
69         dij(1, temp);
70         if(d[2]==inf) printf("-1\n");
71         else cout <<d[2]<<endl;
72     }
73 
74     return 0;
75 }

 

posted @ 2017-06-01 21:43  aowu~  阅读(147)  评论(0)    收藏  举报