zoukankan      html  css  js  c++  java
  • POJ1125 Stockbroker Grapevine

    Stockbroker Grapevine

    题目大意是

    有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。

    这道题,由于数据范围只有100,所以我们只需要先使用floyed求出任意两点间的距离。

    之后,我们可以去枚举我们选取的最初传递人,然后求出他传递给所有人所需的时间,再在所有这些枚举的时间里面找到一个最小值就可以了。

    代码忘记输出disjoint的情况了,但还是过了,附上代码(disjoint自己加上吧):

     1 #include<cstdio>
     2 #define N 110
     3 int n,m,dis[N][N],a,b;
     4 int main(){
     5     scanf("%d",&n);
     6     while(n){
     7         for(int i=1;i<=n;++i)
     8             for(int j=1;j<=n;++j)
     9                 dis[i][j]=42000000;
    10         for(int i=1;i<=n;++i){
    11             scanf("%d",&m);
    12             for(int j=1;j<=m;++j){
    13                 scanf("%d%d",&a,&b);
    14                 dis[i][a]=b;
    15             }
    16         }
    17         for(int k=1;k<=n;++k)
    18             for(int i=1;i<=n;++i)
    19                 for(int j=1;j<=n;++j)
    20                     if(dis[i][j]>dis[i][k]+dis[k][j])
    21                         dis[i][j]=dis[i][k]+dis[k][j];
    22         int mmax=42000000,maxx;
    23         for(int i=1;i<=n;++i){
    24             int tot=0;
    25             for(int j=1;j<=n;++j)
    26                 if(dis[i][j]>tot&&i!=j)
    27                     tot=dis[i][j];
    28             if(tot<mmax){
    29                 mmax=tot;
    30                 maxx=i;
    31             }
    32         }
    33         printf("%d %d
    ",maxx,mmax);
    34         scanf("%d",&n);        
    35     }
    36     return 0;
    37 }
    View Code

     

     

  • 相关阅读:
    Webpack安装及基础配置
    相机拍到了光源的灯珠图像
    面向对象特殊用法
    面向对象初始
    内置函数和必须的模块
    模块基本模式
    函数三
    函数二
    装饰器
    函数初识
  • 原文地址:https://www.cnblogs.com/jsawz/p/6824174.html
Copyright © 2011-2022 走看看