zoukankan      html  css  js  c++  java
  • Stockbroker Grapevine(floyd)

    http://poj.org/problem?id=1125

    题意:

    首先,题目可能有多组测试数据,每个测试数据的第一行为经纪人数量N(当N=0时,
    输入数据结束),然后接下来N行描述第i(1<=i<=N)个经纪人与其他经纪人的关系
    (教你如何画图)。每行开头数字M为该行对应的经纪人有多少个经纪人朋友(该节点
    的出度,可以为0),然后紧接着M对整数,每对整数表示成a,b,则表明该经纪人向第a
    个经纪人传递信息需要b单位时间(即第i号结点到第a号结点的孤长为b),整张图为
    有向图,即弧Vij 可能不等于弧Vji。当构图完毕后,求
    当从该图中某点出发,将“消息”传播到整个经纪人网络的最小时间,输出这个经纪
    人号和最小时间。最小时间的判定方式为——从这个经纪人(结点)出发,整个经纪
    人网络中最后一个人接到消息的时间。如果有一个或一个以上经纪人无论如何无法收
    到消息,输出“disjoint”。
     1 #include<stdio.h>
     2 #include<string.h>
     3 const int INF=1<<28;
     4 int dis[105][105],n;
     5 void init()
     6 {
     7     for (int i = 0; i <= n; i ++)
     8     {
     9         for (int j = 0; j <= n; j ++)
    10         {
    11             dis[i][j] = INF;
    12         }
    13         dis[i][i] = 0;
    14     }
    15 }
    16 void floyd()
    17 {
    18     for (int k = 1; k <= n; k++)
    19     {
    20         for (int i = 1; i <= n; i ++)
    21         {
    22             for (int j = 1; j <= n; j ++)
    23             {
    24                 if (dis[i][j] >  dis[i][k] + dis[k][j])
    25                     dis[i][j] = dis[i][k] + dis[k][j];
    26             }
    27         }
    28     }
    29 }
    30 int main()
    31 {
    32     while(~scanf("%d",&n)&&n)
    33     {
    34         init();
    35         for (int i =1; i <= n; i++)
    36         {
    37             int m,j,time;
    38             scanf("%d",&m);
    39             while(m--)
    40             {
    41                 scanf("%d%d",&j,&time);
    42                 dis[i][j] = time;
    43             }
    44         }
    45         floyd();
    46         int flag = 0,temp = INF;
    47         for (int i = 1; i <= n; i++)
    48         {
    49             int max = 0;
    50             for (int j = 1; j <= n; j++)
    51             {
    52                 if (dis[i][j] > max)
    53                     max = dis[i][j];
    54             }
    55             if (temp > max)
    56             {
    57                 flag = i;
    58                 temp = max;
    59             }
    60 
    61         }
    62         if (flag)
    63             printf("%d %d
    ",flag,temp);
    64         else
    65             printf("disjoint
    ");
    66     }
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    webpack 项目接入Vite的通用方案介绍(上)
    AQS的原理及源码分析
    宝宝喂养
    Java日期时间操作基础——包含JDK1.8时间操作新特性
    ThreadLocal的正确使用与原理
    网络编程基础
    如何优雅正确地通过interrupt方法中断线程
    JavaWeb入门到实战学习笔记
    File与IO基础
    枚举基础
  • 原文地址:https://www.cnblogs.com/lahblogs/p/3247520.html
Copyright © 2011-2022 走看看