记录编号 351709 评测结果 AAAAAAAAA
题目名称 [USACO 2.4.4]回家 最终得分 100
用户昵称 GravatarLethur 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2016-11-16 18:35:03 内存使用 0.30 MiB
显示代码纯文本
#include <cstdio>
#include <cctype>
int ord(char c) {
    if(isupper(c))
        return c - 'A';
    else
        return c - 'a' + 26;
}
const int INF = 60000;
int f[52][52];
int main() {
    freopen("comehome.in","r",stdin);
    freopen("comehome.out","w",stdout);
    int n, m, d;
    char a, b;
    for(int i=0; i<52; i++)
        for(int j=0; j<52; j++)
            f[i][j] = INF;
    for(int i=0; i<26; i++)
        f[i][i] = 0;
    scanf("%d\n", &n);
    for(int i=0; i<n; i++) {
        scanf("%c %c %d\n", &a, &b, &d);
        a = ord(a);
        b = ord(b);
        if(f[a][b] > d)
            f[a][b] = f[b][a] = d;
    }
    for(int k=0; k<52; k++)
        for(int i=0; i<52; i++)
            for(int j=0; j<52; j++)
                if(f[i][k] + f[k][j] < f[i][j])
                    f[i][j] = f[i][k] + f[k][j];
    m = INF;
    a = '#';
    for(char i='A'; i<='Y'; i++) {
        d = f[ord(i)][ord('Z')];
        if(d < m)
            m = d, a = i;
    }
    printf("%c %d\n", a, m);
    return 0;
}