POJ1125 Stockbroker Grapevine -FLOYD练习题

题目大意是:有N个人,相互之间可以传递信息,但是A传给B与B传给A的时间是不一样的,一个人同时可以向多个人传递信息,时间不一样,问你把消息传给谁?可以在最短时间让消息传递给所有人。

典型的FLOYD求最短路,最后找到所有人距离最大之最小那一个人,输出答案。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int maxn=110,maxint=1000000000;
int d[maxn][maxn];
int main(){
    int i,j,k,m,n;
    int x,y;
    while(1){
        scanf("%d",&n);
        if(!n)break;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                d[i][j]=maxint;        
        for(i=1;i<=n;i++){
            scanf("%d",&m);                  
            for(j=1;j<=m;j++){
                scanf("%d%d",&x,&y);                  
                d[i][x]=y;
            }                
        }
        for(i=1;i<=n;i++)d[i][i]=0;
        for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    if(d[i][j]>d[i][k]+d[k][j])
                        d[i][j]=d[i][k]+d[k][j];                         
        int mins=maxint,maxs;
        for(i=1;i<=n;i++){
            maxs=0;
            for(j=1;j<=n;j++)
                if(d[i][j]>maxs)
                    maxs=d[i][j];
            if(maxs<mins){
                mins=maxs;
                k=i;              
            }                  
        }
        printf("%d %d\n",k,mins);
    }
    return 0;    
}


posted @ 2014-12-09 00:44  cnyali  阅读(187)  评论(0编辑  收藏  举报