题意:Floyd!!!直接说输入格式你们一定会做。
就是说多组数据,然后每组先一个n,然后n行,一个数是有几条出边(单向边),然后每条出边俩数分别为点和边权。
好了,现在求的是点x,使从x出发最远的点 最近,不懂直接看代码,风格良好!!!
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 105
#define inf 0x3f3f3f3f
using namespace std;
int ans,answ;
int map[N][N],n;
int main()
{
// freopen("test.in","r",stdin);
int i,j,k;
int a,b,c;
while(scanf("%d",&n),n)
{
memset(map,0x3f,sizeof(map));
for(i=1;i<=n;i++)
{
scanf("%d",&c);
for(j=1;j<=c;j++)
{
scanf("%d%d",&a,&b);
map[i][a]=b;
}
map[i][i]=0;
}
for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
answ=inf;
for(i=1;i<=n;i++)
{
int as=0;
for(j=1;j<=n;j++)as=max(as,map[i][j]);
if(as<answ)
{
answ=as;
ans=i;
}
}
printf("%d %d\n",ans,answ);
}
return 0;
}