POJ 1125 Stockbroker Grapevine

来源:互联网 发布:珠江旭景佳园 网络 编辑:程序博客网 时间:2024/05/21 07:08

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

全源最短路问题:Floyd算法的简单应用!

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int MAXV = 110;const int INF = 0x3f3f3f3f;int G[MAXV][MAXV],n;void Init(){    for(int i=0; i<MAXV; i++){        for(int j=0; j<MAXV; j++)            G[i][j] = INF;        G[i][i] = 0;    }}void Floyd(){    for(int k=1; k<=n; k++)        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++)                if(G[i][j] > G[i][k] + G[k][j])                    G[i][j] = G[i][k] + G[k][j];}int main(){    while(scanf("%d",&n) && n){            Init();        for(int i=1; i<=n; i++){            int m;            scanf("%d",&m);            for(int j=0; j<m; j++){                int a,b;                scanf("%d%d",&a,&b);                G[i][a] = min(b, G[i][a]);            }        }        //cout << "====================================================" << endl;        Floyd();        int id, ans = INF;        for(int i=1; i<=n; i++){            int tmp = -INF;            for(int j=1; j<=n; j++)                tmp = max(G[i][j], tmp);            if(ans > tmp){                ans = tmp;                id = i;            }        }        if(ans == 0x3f3f3f3f){            cout << "disjoint" << endl;            continue;        }        cout << id << " " << ans << endl;    }    //system("pause");    return 0;}


0 0