比赛 |
noip2016普及练习1 |
评测结果 |
AAAAAAAAA |
题目名称 |
回家 |
最终得分 |
100 |
用户昵称 |
citrono |
运行时间 |
0.007 s |
代码语言 |
Pascal |
内存使用 |
0.18 MiB |
提交时间 |
2016-11-03 20:27:29 |
显示代码纯文本
var
a:array['A'..'z','A'..'z']of longint;
tt,i,j,n,ans,min:longint;
k,c,c2,c1:char;
d:array['A'..'z']of longint;
f:array['A'..'z']of boolean;
begin
assign(input,'comehome.in');reset(input);
assign(output,'comehome.out');rewrite(output);
fillchar(a,sizeof(a),$7f div 2);
fillchar(d,sizeof(d),$7f div 2);
fillchar(f,sizeof(f),false);
readln(n);
for i:=1 to n do
begin
read(c1,c,c2);
read(tt);
if (tt<a[c1,c2])or(tt<a[c2,c1])
then begin a[c1,c2]:=tt;a[c2,c1]:=a[c1,c2];end;
readln;
end;
for c:='A' to 'z' do
if a[c,'Z']<10000 then d[c]:=a[c,'Z'];
d['Z']:=0;
f['Z']:=true;
for i:=2 TO n do
begin
k:='0';
min:=10000000;
for c1:='A' TO 'z' do
if (c1<>'Z')and(d[c1]<min)and(not f[c1]) then
begin
k:=c1;min:=d[c1];
end;
if (min=maxlongint)or(k='0') then break;
f[k]:=true;
for c2:='A' TO 'z' do
if (d[c2]>d[k]+a[k,c2])and(not f[c2])
then d[c2]:=d[k]+a[k,c2];
end;
min:=maxlongint;
for c:='A' to 'z' do
if (c in ['A'..'Y'])and(d[c]<min) then
begin
k:=c;min:=d[c];
end;
writeln(k,' ',min);
close(input);
close(output);
end.