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

     

     

  • 相关阅读:
    补发《超级迷宫》站立会议九
    补发《超级迷宫》站立会议八
    补发《超级迷宫》站立会议七
    补发《超级迷宫》站立会议六
    一周开发项目
    所学的内容
    开发项目和所用时间 感想
    自我介绍
    大容量数据转移操作命令——BULK INSERT(类似于BCP)
    字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/jsawz/p/6824174.html
Copyright © 2011-2022 走看看