1125:Stockbroker Grapevine

keyword

Warshall-Floyd C++

概要

有向グラフが与えられる。自分以外のノードへの距離の最大値が最小になるようなノードとその値を求める問題。ノード数は100以下。
ノード数が小さいのでWarshall-Floydが間に合う。

static int g[101][101];
static int dist[101];

int main(){
    int n;
    while( n = readint(), n){
        int i, j, k, m;
        REP(i,n)REP(j,n) g[i][j] = 1<<28;
        REP(i,n){
            m = readint();
            REP(j,m){
                g[i][readint()-1] = readint();
            }
        }

        REP(i,n) g[i][i] = 0;
        REP(k,n)REP(i,n)REP(j,n) g[i][j] = min(g[i][j],g[i][k]+g[k][j]);

        int best = 1<<25, key = 0;
        REP(i,n){
            int ma = *max_element(g[i], g[i]+n);
            if(ma < best){
                best = ma;
                key = i+1;
            }
        }
        if(key) printf("%d %d\n",key, best);
        else printf("disjoint\n");
    }

    return 0;
}