简单题。很早以前做的。贴一下凌乱的代码。
#include <cstdio>
#include <cstring>
int n,i,j,k,tmp,best,nbest,t1,t2;
int a[110][110],num[110];
bool flag;

int main()
{

while (scanf("%d",&n),n)
{
memset(a,0x7f,sizeof(a));

for (i=1;i<=n;i++)
{
scanf("%d",&num[i]);

for (j=1;j<=num[i];j++)
{
scanf("%d%d",&t1,&t2);
a[i][t1]=t2;
}
}
for (i=1;i<=n;i++) a[i][i]=0;
for (k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (a[i][k]!=0x7f7f7f7f && a[k][j]!=0x7f7f7f7f) a[i][j]<?=a[i][k]+a[k][j];

for (best=0x7fffffff,i=1;i<=n;i++)
{
flag=false;

for (tmp=0,j=1;j<=n;j++)
{
tmp>?=a[i][j];

if (a[i][j]==0x7f7f7f7f)
{
flag=true;
break;
}
}

if (!flag)
{

if (tmp<best)
{
best=tmp;
nbest=i;
}
}
}
if (best==0x7fffffff) printf("disjoint\n");
else printf("%d %d\n",nbest,best);
}
return 0;
}
