POJ 1125 Stockbroker Grapevine(Floyd)

( ̄▽ ̄)"

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<stack>
#include<map>
using namespace std;

const int INF=30;  //infÓÃ15£¬10e8¶¼wa£¬ÓÃ20£¬30²Åac
const int MAXN=110;
int lc[MAXN][MAXN];

void floyd_output(int n)
{
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                lc[i][j]=min(lc[i][j],lc[i][k]+lc[k][j]);

    int maxn,minn=INF,st;
    for(int i=1;i<=n;i++)
    {
        maxn=0;
        for(int j=1;j<=n;j++)
        {
            if(i!=j&&maxn<lc[i][j])
                maxn=lc[i][j];
    //求i……j最长路径,比如从i点到j点(i不等于j),取最长的时间,因为散播是从i点向其他各点同时开始进行的,具有共时性,故应求最长时间
        }
        if(minn>maxn)
        {
            minn=maxn;
            st=i;
        }
    }
    if(minn<INF)
        printf("%d %d\n",st,minn);
    else printf("disjoint\n");
}

int main()
{
    int n;
    while(scanf("%d",&n)&&n)
    {
        memset(lc,INF,sizeof(lc));
        for(int u=1;u<=n;u++)
        {
            int cnt,v,t;
            scanf("%d",&cnt);
            while(cnt--)
            {
                scanf("%d%d",&v,&t);
                lc[u][v]=t;
            }
        }
        floyd_output(n);
    }
    return 0;
}
posted @ 2016-02-17 23:51  &ATM  阅读(167)  评论(0编辑  收藏  举报
……