比赛 |
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;
}