比赛 noip2016普及练习1 评测结果 AAAAAAAAA
题目名称 回家 最终得分 100
用户昵称 Lethur 运行时间 0.011 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2016-11-03 20:43:21
显示代码纯文本
#include <iostream>  
#include <cctype>  
#include <cstdio>  
#include <vector>  
  
using namespace std;  
  
#define INF 99999999  
#define MAX_N 26  
  
struct Edge  
{  
    int to;  
    int cost; 
	Edge(int v,int d):to(v),cost(d){} 
};  
  
int P;  
char A[2],B[2];  
int cost;  
vector<Edge> G[MAX_N+MAX_N];  
int d[MAX_N+MAX_N];  
bool vis[MAX_N+MAX_N];  
  
void Dijkstra(int s)  
{  
    d[s]=0;  
    while(true)  
    {  
        int v=-1;  
        for(int u=0;u<MAX_N+MAX_N;u++) if(!vis[u] && (v==-1 || d[v]>d[u])) v=u;  
  
        if(v==-1) break;  
        vis[v]=true;  
  
        int sz=G[v].size();  
        for(int u=0;u<sz;u++)  
        {  
            if(!vis[G[v][u].to] && d[G[v][u].to]>d[v]+G[v][u].cost)  
                d[G[v][u].to]=d[v]+G[v][u].cost;  
        }  
    }  
}  
  
int main()  
{  
    freopen("comehome.in","r",stdin);  
    freopen("comehome.out","w",stdout);  
  
    scanf("%d",&P);  
  
    for(int i=0;i<P;i++)  
    {  
        int a,b;  
        scanf("%s%s%d",A,B,&cost);  
        if(isupper(A[0]))  
        {  
            a=A[0]-'A';  
        }  
        else  
        {  
            a=A[0]-'a'+MAX_N;  
        }  
        if(isupper(B[0]))  
        {  
            b=B[0]-'A';  
        }  
        else  
        {  
            b=B[0]-'a'+MAX_N;  
        }  
  
        G[a].push_back(Edge(b,cost));  
        G[b].push_back(Edge(a,cost));  
    }  
  
    for(int i=0;i<MAX_N+MAX_N;i++) d[i]=INF;  
  
    Dijkstra(MAX_N-1);  
  
    char minch;  
    int minx;  
    minx=INF;  
    for(int i=0;i<MAX_N-1;i++)  
    {  
        if(minx>d[i])  
        {  
            minx=d[i];  
            minch=i+'A';  
        }  
    }  
  
    cout<<minch<<" "<<minx<<endl;  
  
    return 0;  
}