裸Floyd
Program P1125;
const
maxn=100;
maxedge=10;
NULL=-2139062144;
var
n,i,j,k,m,v,t,ans:longint;
f:array[1..maxn,1..maxn] of longint;
function max(a,b:longint):longint;
begin
if a<b then exit(b) else exit(a);
end;
begin
read(n);
while (n<>0) do
begin
fillchar(f,sizeof(f),128);
for i:=1 to n do
begin
f[i,i]:=0;
read(m);
for j:=1 to m do
begin
read(v,t);
f[i,v]:=t;
end;
end;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (f[i,k]<>NULL) and (f[k,j]<>NULL) then
if (f[i,k]+f[k,j]<f[i,j]) or (f[i,j]=NULL) then f[i,j]:=f[i,k]+f[k,j];
ans:=maxlongint;
v:=0;
for i:=1 to n do
begin
t:=f[i,1];
for j:=1 to n do
begin
if f[i,j]=NULL then break else t:=max(f[i,j],t);
end;
if f[i,j]=NULL then continue;
if t<ans then begin v:=i; ans:=t; end;
end;
if (ans=maxlongint) then writeln('disjoint') else writeln(v,' ',ans);
read(n);
end;
end.