求最短路,dp
#include <bits/stdc++.h>
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
int mapp[110][110];
while(~scanf("%d",&n)&&n){
for (int i=0;i<110;i++){
fill(mapp[i],mapp[i]+110,1<<20);
mapp[i][i]=0;
}
for (int i=1;i<=n;i++){
int m;scanf("%d",&m);
for (int s=0;s<m;s++){
int k,time;
scanf("%d%d",&k,&time);
mapp[i][k]=time;
}
}
for (int i=1;i<=n;i++){
for (int s=1;s<=n;s++){
for (int k=1;k<=n;k++){
mapp[s][k]=min(mapp[s][i]+mapp[i][k],mapp[s][k]);
}
}
}
int st=0;
int minnum=1<<20+10;
for (int i=1;i<=n;i++){
int maxnum=0;
for (int s=1;s<=n;s++){
maxnum=max(maxnum,mapp[i][s]);
}
if (minnum>maxnum){
st=i;
minnum=maxnum;
}
}
if (minnum==1<<20+10){
printf("disjoint\n");
} else printf("%d %d\n",st,minnum);
}
return 0;
}