#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
#define INF 0x3f3f3f3f
int n;
int map[120][120];
void Floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=MIN(map[i][j],map[i][k]+map[k][j]);
}
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
int main()
{
while(~scanf("%d",&n)&&n)
{
init();
for(int i=1;i<=n;i++)
{
int t;
scanf("%d",&t);
while(t--)
{
int b,v;
scanf("%d%d",&b,&v);
map[i][b]=v;
}
}
Floyd();
int res=INF,lo;
for(int i=1;i<=n;i++)
{
int tem=-1;
for(int j=1;j<=n;j++)
{
tem=MAX(tem,map[i][j]);
}
if(tem<res)
{
res=tem;
lo=i;
}
}
if(res==INF)
printf("disjoint\n");
else
printf("%d %d\n",lo,res);
}
}
poj 1125 最短路
最新推荐文章于 2017-08-23 12:44:28 发布