#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<cstring>
using namespace std;
const int MAXN = 105;
int g[MAXN][MAXN];
int n;
const int inf = 0x1fffffff;
int getmin(int id);
int main(){
int i,j,k,total,t,p;
while(scanf("%d",&n)!=EOF){
if(n == 0)
break;
for(i = 1; i <= n; ++i){
for(j = 1; j <= n; ++j){
g[i][j] = inf;
}
}
for(i = 1; i <= n; ++i){
scanf("%d",&total);
for(j = 1; j <= n;++j){
g[i][j] = inf;
}
g[i][i] = 0;
for(j = 1; j <= total; ++j){
scanf("%d%d",&p,&t);
g[i][p] = t;
}
}
//graph completed
for(i = 1; i <= n; ++i){
for(j = 1; j <= n; ++j){
for(k = 1; k <= n; ++k){
int tmp = g[j][i] + g[i][k];
if(g[j][k] > tmp){
g[j][k] = tmp;
}
}
}
}
int globalmin = 0x7fffffff,recp = -1;
for(i = 1; i <= n; ++i){
int get = getmin(i);
bool change = globalmin > get;
globalmin = change? get:globalmin;
recp = change?i:recp;
}
if(globalmin != inf){
printf("%d %d\n",recp,globalmin);
}
else{
printf("disjoint\n");
}
}
return 0;
}
int getmin(int id){
int localmax = -1;
for(int i = 1; i <=n ;++i){
localmax = max(localmax,g[id][i]);
}
return localmax;
}
poj 1125
最新推荐文章于 2022-03-14 13:47:45 发布