2017年4月3日 | ljfcnyali
Floyd水题,直接上代码!
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
const long long maxn=1100,INF=1000000000;
long long a[maxn][maxn];
int main(){
long long n,m,j,k,i,x,y;
while(1){
scanf("%I64d",&n);
if(!n)
break;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=INF;
for(i=1;i<=n;i++){
scanf("%I64d",&m);
for(j=1;j<=m;j++){
scanf("%I64d%I64d",&x,&y);
a[i][x]=y;
}
}
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][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
long long min=INF,max;
for(i=1;i<=n;i++){
max=0;
for(j=1;j<=n;j++)
if(a[i][j]>max)
max=a[i][j];
if(max<min){
min=max;
k=i;
}
}
printf("%I64d %I64d\n",k,min);
}
return 0;
}