http://poj.org/problem?id=1125

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<map>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;

const int N=105;
const int MAX=100000;
int dist[N][N];
int main()
{

   //freopen("data.txt","r",stdin);
   int n;
   while(cin>>n)
   {
       if(n==0)
       break;
       for(int i=1;i<=n;++i)
       for(int j=1;j<=n;++j)
       dist[i][j]=MAX;//初始化 边最大
       for(int i=1;i<=n;++i)
       {
           int m;
           cin>>m;
           while(m--)
           {
               int j,d;
               cin>>j>>d;
               dist[i][j]=d;//记录边距
           }
       }
       for(int l=1;l<=n;++l)
       {
           for(int i=1;i<=n;++i)
           {
               for(int j=1;j<=n;++j)
               {
                   if(dist[i][l]+dist[l][j]<dist[i][j])//更新
                   {
                       dist[i][j]=dist[i][l]+dist[l][j];
                   }
               }
           }
       }
       int k,MIN=MAX;
       for(int i=1;i<=n;++i)
       {
           int tempnum=0;
           for(int j=1;j<=n;++j)
           {
               if(i!=j)
               tempnum=max(tempnum,dist[i][j]);
           }
           if(tempnum<MIN)//着最大 中最小的
           {
               MIN=tempnum;
               k=i;
           }
       }
       if(MIN==MAX)
       cout<<"disjoint"<<endl;
       else
       cout<<k<<" "<<MIN<<endl;
   }
   return 0;
}

  

posted on 2012-08-05 16:20  夜->  阅读(126)  评论(0编辑  收藏  举报