usaco 2.4 comehome

来源:互联网 发布:网络事件炒作营销方案 编辑:程序博客网 时间:2024/06/07 17:29


Executing...
   Test 1: TEST OK [0.000 secs, 3244 KB]
   Test 2: TEST OK [0.000 secs, 3244 KB]
   Test 3: TEST OK [0.000 secs, 3244 KB]
   Test 4: TEST OK [0.000 secs, 3244 KB]
   Test 5: TEST OK [0.000 secs, 3244 KB]
   Test 6: TEST OK [0.000 secs, 3244 KB]
   Test 7: TEST OK [0.000 secs, 3244 KB]
   Test 8: TEST OK [0.000 secs, 3244 KB]
   Test 9: TEST OK [0.000 secs, 3244 KB]


All tests OK.
通过Floyd-Warshall计算出每个结点间的距离,最后输出A-Y到Z即谷仓的最小值就可以了


#include <iostream>#include <cstdio>using namespace std;int s[60][60];int main(){    freopen("comehome.in","r",stdin);    freopen("comehome.out","w",stdout);    int m;    scanf("%d",&m);    for (int i=0;i<60;i++)    for (int j=0;j<60;j++)        s[i][j] = 99999;    for (int i=0;i<m;i++)    {        getchar();        char a,b;        int dis;        scanf("%c %c %d",&a,&b,&dis);        if (a==b) continue;        if (dis<s[a-'A'][b-'A'])        {            s[a-'A'][b-'A'] = dis;            s[b-'A'][a-'A'] = dis;        }    }    for (int k=0;k<='z'-'A';k++)    {        for (int i=0;i<='z'-'A';i++)        {            for (int j=0;j<='z'-'A';j++)            {                if (s[i][k]+s[k][j]<s[i][j])                {                    s[i][j] = s[i][k]+s[k][j];                }            }        }    }    int mini = 0;    for (int i=0;i<'Z'-'A';i++)    {        if (s['Z'-'A'][i]<s['Z'-'A'][mini])            mini = i;    }    printf("%c %d\n",'A'+mini,s['Z'-'A'][mini]);    return 0;}


原创粉丝点击