zoukankan      html  css  js  c++  java
  • POJ 1125 Stockbroker Grapevine

    题目链接http://poj.org/problem?id=1125

    最短路的题目。此题的题意是相当蛋疼啊。来看翻译下输入输出

    输入 
    你的程序包含多组股票经纪人的输入数据。每组以股票经纪人的人数开始。接下来的几行是每个经纪人与其他人接触的一些信息,包括这些人都是谁,以及将讯息传达到他们所需的时间。每个经纪人与其他人接触信息的格式如下:开头的第一个数表示共有n个联系人,接下来就有n对整数。每对整数列出的第一个数字指的是一个联系人(例如,一个'1'是指编号1的人),其次是在传递一个信息给那个人时所采取分钟的时间。没有特殊的标点符号或空格规则。 
    每个人的编号为1至经纪人数目。所花费的传递时间是从1到10分钟(含10分种)。股票经纪的人数范围是从1到100。当输入股票经纪人的人数为0时,程序终止。 
    输出 
    在对于每一组数据,你的程序必须输出一行,包括的信息有传输速度最快的人,以及在最后一个人收到消息后,所总共使用的时间(整数分钟计算)。 
    你的程序可能会收到的一些关系会排除一些人,也就是有些人可能无法访问。如果你的程序检测到这样一个破碎的网络,只需输出消息“disjoint”。请注意,所花费的时间是从A传递消息到B,B传递信息到A不一定是花费同样的传递时间,但此类传播也是可能的。

    其实看到这还是不明白的。 其实让求的是最短路中距离最大的。就第一组数据。经过一边Floyd后。

    是这样的。 第一行的最大值 5,第二行的 6,第三行的 2  。。哪一行的最小?第三行 所以输出3.然后输出的是行最大值的最小值。

    Floyd

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 long map[310][310];
     5 int main()
     6 {
     7     int a,b,n,m,t,i,j,k;
     8     while(~scanf("%d",&t))
     9     {
    10         int max=10000;
    11         if(t==0)
    12             break;
    13         for(i=0;i<=t;i++)
    14             for(j=0;j<=t;j++)
    15                 map[i][j]=1000000;
    16                 for(i=0;i<t;i++)
    17                 map[i][i]=0;
    18         for(i=1;i<=t;i++)
    19         {
    20             scanf("%d",&n);
    21             for(j=1;j<=n;j++)
    22             {
    23                 scanf("%d%d",&a,&b);
    24                 map[i][a]=b;
    25             }
    26         }
    27         for(k=1;k<=t;k++)
    28             for(i=1;i<=t;i++)
    29                 for(j=1;j<=t;j++)
    30                     if(map[i][j]>(map[i][k]+map[k][j]))
    31                        map[i][j]=map[i][k]+map[k][j];
    32         for(i=1;i<=t;i++)
    33         {
    34             int min=0;
    35             for(j=1;j<=t;j++)
    36             {
    37                 if(i!=j&&map[i][j]>min)
    38                     min=map[i][j];
    39             }
    40             if(min<max)
    41             {
    42                 max=min;
    43                 m=i;
    44             }
    45         }
    46         if(max<10000)
    47             printf("%d %d\n",m,max);
    48         else
    49             puts("disjoint");
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    Core Animation 文档翻译—附录C(KVC扩展)
    Core Animation 文档翻译—附录B(可动画的属性)
    Core Animation 文档翻译—附录A(Layer样貌相关属性动画)
    Core Animation 文档翻译 (第八篇)—提高动画的性能
    Core Animation 文档翻译 (第七篇)—改变Layer的默认动画
    Core Animation 文档翻译 (第六篇)—高级动画技巧
    Core Animation 文档翻译 (第五篇)—构建Layer的层次结构
    用Markdown快速排版一片文章
    Core Animation 文档翻译 (第四篇)—让Layer的content动画起来
    Core Animation 文档翻译(第三篇)—设置Layer对象
  • 原文地址:https://www.cnblogs.com/timeship/p/2640756.html
Copyright © 2011-2022 走看看