测试数据有点问题,题目明明写的时间是在1~10min内,但最大值设成11的时候是过不了的,而且不存在输出为disjoint的数据。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
while (1)
{
int d[200][200];
int n;
scanf("%d",&n);
if (!n)
break;
int i,j,k;
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
{
if (i==j)
d[i][j]=0;
else
d[i][j]=1000000;
}
int num;
int pair;
for (i=0;i<=n-1;i++)
{
scanf("%d",&pair);
for (j=0;j<=pair-1;j++)
{
scanf("%d",&num);
scanf("%d",&d[i][num-1]);
}
}
for (k=0;k<=n-1;k++)
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
if (d[i][k]+d[k][j]<d[i][j])
d[i][j]=d[i][k]+d[k][j];
int max,min=1000000,record;
for (k=0;k<=n-1;k++)
{
max=0;
for (i=0;i<=n-1;i++)
{
if (d[k][i]>max)
max=d[k][i];
}
if (max<min)
{
min=max;
record=k;
}
}
if (min==1000000)
printf("disjoint\n");
else
printf("%d %d\n",record+1,min);
}
return 0;
}