zoukankan      html  css  js  c++  java
  • poj 1125 Stockbroker Grapevine(多源最短)

    链接:poj 1125

    题意:输入n个经纪人,以及他们之间传播谣言所需的时间,

    问从哪个人開始传播使得全部人知道所需时间最少。这个最少时间是多少

    分析:由于谣言传播是同一时候的,对于某条路径使得全部人都知道的时间。不是时间的总和,而是路径中最长的边

    从多条路径的最长边,找出最小值。由于为多源最短路,用Floyd比較方便

    #include<stdio.h>
    #include<limits.h>
    int a[105][105];
    void floyd(int n)
    {
        int i,j,k,s,pos;
        for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    if(a[i][k]!=INT_MAX&&a[k][j]!=INT_MAX&&a[i][k]+a[k][j]<a[i][j])
                        a[i][j]=a[i][k]+a[k][j];
        k=INT_MAX;
        pos=0;
        for(i=1;i<=n;i++){
            s=0;
            for(j=1;j<=n;j++)             //先求出路径中的最长边为总传播时间
                if(i!=j&&a[i][j]>s)
                    s=a[i][j];
            if(s<k){            //再找出传播时间的最小值
                k=s;
                pos=i;
            }
        }
        if(k==INT_MAX)
            printf("disjoint
    ");
        else
            printf("%d %d
    ",pos,k);
    
    }
    int main()
    {
        int n,m,i,j,b,t;
        while(scanf("%d",&n)!=EOF){
            if(n==0)
                break;
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    a[i][j]=INT_MAX;
            for(i=1;i<=n;i++){
                scanf("%d",&m);
                for(j=1;j<=m;j++){
                    scanf("%d%d",&b,&t);
                    a[i][b]=t;              //单程
                }
            }
            floyd(n);
        }
        return 0;
    }


  • 相关阅读:
    Convolution_model_Application_v1a
    MBSE基于模型的系统工程
    Convolution_model_Step_by_Step_v2a
    深度学习精炼图笔记总结
    TensorFlow_Tutorial_v3b——improving NN performance测验
    maven之安装jar包之本地仓库
    linux之rpm管理
    linux之防火墙
    linux之ntp服务
    linux之chkconfig
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4568812.html
Copyright © 2011-2022 走看看