Floyd算法模板
附上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=0x3f3f3f3f;
int n;
int map[110][110];
int main()
{
while(scanf("%d",&n)&&n){
memset(map,maxn,sizeof(map));
for(int i=1;i<=n;i++){
map[i][i]=0;
}
int m;
int v,t;
int ans=0;
for(int i=1;i<=n;i++){
scanf("%d",&m);
for(int j=1;j<=m;j++){
scanf("%d%d",&v,&t);
map[i][v]=t;
}
}
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]);
}
}
}
int minn=maxn;
for(int i=1;i<=n;i++){
ans=0;
for(int j=1;j<=n;j++){
ans=max(ans,map[i][j]);
}
if(ans<minn){
t=i;
minn=ans;
}
}
if(maxn==minn){
printf("disjoint\n");
}else{
printf("%d %d\n",t,minn);
}
}
return 0;
}