题目链接:点击打开链接
题目大意:一张有向图,100个点,从哪个点开始出发,到达其他点的最大距离最小。
方法就是floyd处理出两点间距离,然后再枚举出答案。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
int dis[105][105];
int main(){
int n,x,v,t,ans,tmp,p;
while(scanf("%d",&n),n){
memset(dis,INF,sizeof(dis));
for(int i = 1;i <= n;i++){
dis[i][i] = 0;
}
for(int i = 1;i <= n; i++){
cin>>x;
for(int j = 0; j < x; j++){
cin>>v>>t;
dis[i][v] = t;
}
}
for(int k = 1;k <= n;k++){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++ ){
if(dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
ans = INF + 1;
for(int i = 1;i <= n;i++){
tmp = 0;
for(int j = 1; j <= n;j++) tmp = max(tmp,dis[i][j]);
if(ans > tmp){
ans = tmp;
p = i;
}
}
printf("%d %d\n",p,ans);
}
return 0;
}