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 }
  • 相关阅读:
    find module providing package github.com/go-sql-driver/mysql: working directory is not part of a module
    深度学习中的epoch、batchsize、iterations的理解
    淘宝软件质量属性分析
    Git
    多线程
    Spark基础之Scala
    机器学习十讲第十讲
    机器学习十讲第九讲
    机器学习十讲第六讲
    本地MarkDown优雅发表
  • 原文地址:https://www.cnblogs.com/timeship/p/2640756.html
Copyright © 2011-2022 走看看