纯裸的最短路,因为最多只有52个点,floyd,spfa,dijksta都可以,不过记得判重边
{
ID:lucky141
PROG:comehome
LANG:PASCAL
}
program comehome;
var
a:array['A'..'z','A'..'z'] of longint;
b:array['A'..'z',1..52] of char;
l:array['A'..'z'] of integer;
d:array['A'..'z'] of longint;
flag:array['A'..'z'] of boolean;
q:array[1..10000] of char;
n:integer;
max,w:longint;
i,ans:char;
procedure init;
var
i,x,code:integer;
s:string;
p,q:char;
begin
readln(n);
for i:=1 to n do
begin
readln(s);
p:=s[1];
q:=s[3];
delete(s,1,4);
val(s,x,code);
if (a[p,q]=0) or (a[p,q]>x) then
begin
if a[p,q]=0 then
begin
inc(l[p]);
b[p,l[p]]:=q;
inc(l[q]);
b[q,l[q]]:=p;
end;
a[p,q]:=x;
a[q,p]:=x;
end;
end;
end;
procedure spfa;
var
head,tail,j:integer;
k:char;
begin
fillchar(d,sizeof(d),$5F);
fillchar(q,sizeof(q),0);
fillchar(flag,sizeof(flag),true);
w:=d[i];
d[i]:=0;
flag[i]:=false;
head:=0;
tail:=1;
q[1]:=i;
while head<tail do
begin
inc(head);
flag[q[head]]:=true;
for j:=1 to l[q[head]] do
begin
k:=b[q[head],j];
if d[k]>d[q[head]]+a[q[head],k] then
begin
d[k]:=d[q[head]]+a[q[head],k];
if flag[k] then
begin
inc(tail);
q[tail]:=k;
flag[k]:=false;
end;
end;
end;
end;
for i:='A' to 'Y' do
if (d[i]<>w) and (d[i]<max) then
begin
max:=d[i];
ans:=i;
end;
end;
begin
assign(input,'comehome.in');
reset(input);
assign(output,'comehome.out');
rewrite(output);
fillchar(a,sizeof(a),0);
init;
max:=maxlongint;
i:='Z';
spfa;
writeln(ans,' ',max);
close(input);
close(output);
end.