POJ 1125 Stockbroker Grapevine

题目分析:
Floyd全局最短路,然后扫一遍就知道答案了
据说POJ数据很水不用判断是否联通

代码实现

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=150;
int n,a[maxn][maxn],b[maxn];
int main(){
    while(scanf("%d",&n)==1){
        if(!n)
            break;
        memset(a,0x3f,sizeof(a));
        memset(b,0,sizeof(b));
        for(int i=1,m;i<=n;i++){
            cin>>m;
            for(int j=0,to;j<m;j++){
                cin>>to;
                cin>>a[i][to];
            }
        }
        for(int i=1;i<=n;i++)
            a[i][i]=0;
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                b[i]=max(b[i],a[i][j]);
        int ans=1;
        for(int i=2;i<=n;i++)
            ans= b[i]<b[ans] ? i : ans;
        if(b[ans]!=0x3f)
            cout<<ans<<" "<<b[ans]<<endl;
        else cout<<"disjoint"<<endl;
    }
    return 0;
}

By YOUSIKI

你可能感兴趣的:(poj)