USACO 2.4 Bessie Come Home(最短路)

水题,没注意无向边,2Y。

 1 /*
 2   ID: cuizhe
 3   LANG: C++
 4   TASK: comehome
 5 */
 6 #include <iostream>
 7 #include <cstdio>
 8 #include <cstring>
 9 #include <cmath>
10 #include <algorithm>
11 using namespace std;
12 #define N 100000000
13 int p[101][101];
14 int judge(char ch)
15 {
16     if(ch >= 'A'&&ch <= 'Z')
17     return ch-'A'+1;
18     else
19     return ch-'a'+27;
20 }
21 int main()
22 {
23     int i,j,k,n,sv,ev,w,ans,t;
24     freopen("comehome.in","r",stdin);
25     freopen("comehome.out","w",stdout);
26     char n1[2],n2[2];
27     scanf("%d",&n);
28     for(i = 1;i <= 52;i ++)
29     {
30         for(j = 1;j <= 52;j ++)
31         p[i][j] = N;
32         p[i][i] = 0;
33     }
34     for(i = 1;i <= n;i ++)
35     {
36         scanf("%s%s%d",n1,n2,&w);
37         sv = judge(n1[0]);
38         ev = judge(n2[0]);
39         if(p[sv][ev] > w)
40         {
41             p[sv][ev] = w;
42             p[ev][sv] = w;
43         }
44     }
45     for(i = 1;i <= 52;i ++)
46     {
47         for(j = 1;j <= 52;j ++)
48         {
49             for(k = 1;k <= 52;k ++)
50             {
51                 if(p[j][k] > p[j][i]+p[i][k])
52                 p[j][k] = p[j][i]+p[i][k];
53             }
54         }
55     }
56     ans = N;
57     for(i = 1;i <= 25;i ++)
58     {
59         if(ans > p[i][26])
60         {
61             ans = p[i][26];
62             t = i;
63         }
64     }
65     printf("%c %d\n",t+'A'-1,ans);
66     return 0;
67 }
posted @ 2012-11-15 15:37  Naix_x  阅读(190)  评论(0编辑  收藏  举报