pku 1125—Stockbroker Grapevine

来源:互联网 发布:淘宝人生txt 久久 编辑:程序博客网 时间:2024/06/03 17:20

/*
floyd算法
*/
#include<iostream>
#include<limits.h>
using namespace std;
#define L INT_MAX
int a[105][105],max0[105];
void floyd(int n)
{
    int i,j,k;
    for(k=1;k<=n;k++)             //弗洛伊德算法
          for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
               if(a[i][k]!=L && a[k][j]!=L && a[i][j]>a[i][k]+a[k][j])
                     a[i][j]=a[i][k]+a[k][j];
            }
}
int main()
{
    int n,m,i,j,k,to,value;
    while(cin>>n)
    {
        if(n==0)break;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(i==j)a[i][j]=0;
                else a[i][j]=L;
            }
        }
        for(i=1;i<=n;i++)
        {
            cin>>m;
            for(j=1;j<=m;j++)
            {
               cin>>to>>value;
               a[i][to]=value;
            }
        }
        floyd(n);
        for(i=1;i<=n;i++)
        {
            max0[i]=0;
            for(j=1;j<=n;j++)
            {
                if(max0[i]<a[i][j])max0[i]=a[i][j];
            }
        }
        int min=L,ans;
        for(i=1;i<=n;i++)
        {
            if(max0[i]<min)
            {
                min=max0[i];
                ans=i;
            }
        }
        if(min==L)cout<<"disjoint"<<endl;
        else cout<<ans<<" "<<min<<endl;
    }
    system("pause");
    return 0;
}