一、Description

Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst the stockbrokers to give your employer the tactical edge in the stock market. For maximum effect, you have to spread the rumours in the fastest possible way.
Unfortunately for you, stockbrokers only trust information coming from their "Trusted sources" This means you have to take into account the structure of their contacts when starting a rumour. It takes a certain amount of time for a specific stockbroker to pass the rumour on to each of his colleagues. Your task will be to write a program that tells you which stockbroker to choose as your starting point for the rumour, as well as the time it will take for the rumour to spread throughout the stockbroker community. This duration is measured as the time needed for the last person to receive the information.

Input

Your program will input data for different sets of stockbrokers. Each set starts with a line with the number of stockbrokers. Following this is a line for each stockbroker which contains the number of people who they have contact with, who these people are, and the time taken for them to pass the message to each person. The format of each stockbroker line is as follows: The line starts with the number of contacts (n), followed by n pairs of integers, one pair for each contact. Each pair lists first a number referring to the contact (e.g. a '1' means person number one in the set), followed by the time in minutes taken to pass a message to that person. There are no special punctuation symbols or spacing rules.
Each person is numbered 1 through to the number of stockbrokers. The time taken to pass the message on will be between 1 and 10 minutes (inclusive), and the number of contacts will range between 0 and one less than the number of stockbrokers. The number of stockbrokers will range from 1 to 100. The input is terminated by a set of stockbrokers containing 0 (zero) people.

Output

For each set of data, your program must output a single line containing the person who results in the fastest message transmission, and how long before the last person will receive any given message after you give it to this person, measured in integer minutes.
It is possible that your program will receive a network of connections that excludes some persons, i.e. some people may be unreachable. If your program detects such a broken network, simply output the message "disjoint". Note that the time taken to pass the message from person A to person B is not necessarily the same as the time taken to pass it from B to A, if such transmission is possible at all.
二、题解
        该题的英文比题目更难懂啊,幸好BBS上有大神的翻译和解释,下面就是引用:
        首先,题目可能有多组测试数据,每个测试数据的第一行为经纪人数量N(当N=0时,输入数据结束),然后接下来N行描述第i(1<=i<=N)个经纪人与其他经纪人的关系 。每行开头数字M为该行对应的经纪人有多少个经纪人朋友(该节点的出度,可以为0),然后紧接着M对整数,每对整数表示成a,b,则表明该经纪人向第a个经纪人传递信息需要b单位时间(即第i号结点到第a号结点的孤长为b),整张图为有向图,即弧Vij 可能不等于弧Vji。当构图完毕后,求当从该图中某点出发,将“消息”传播到整个经纪人网络的最小时间,输出这个经纪人号和最小时间。最小时间的判定方式为——从这个经纪人(结点)出发,整个经纪人网络中最后一个人接到消息的时间。如果有一个或一个以上经纪人无论如何无法收到消息,输出“disjoint”(有关图的连通性,你们懂得,但据其他同学说,POJ测试数据中不会有,就是说,你不判定,一样能过,题目数据够水的)。
       解决这个问题的方法有本文所用的Floyd-Warshall算法,也可以用迪杰斯特拉最短路径算法。Floyd-Warshall算法详见算法,我已经在前篇文章中简单介绍了一下。
三、Java代码

import java.util.Scanner;public class Main {static int[][] map;static int[][][] dist;static int n;static int INF=Integer.MAX_VALUE;public static void floyd(){int i,j,k;for(k=1;k<=n;k++){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if (i!=j && map[i][k]!=INF && map[k][j]!=INF && map[i][k] + map[k][j] < map[i][j]) {   map[i][j] = map[i][k] + map[k][j];   }   }}}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int i,j,temp,temp2,temp3;while((n=sc.nextInt())!=0){map=new int[n+1][n+1];for(i=0;i<=n;i++){for(j=0;j<=n;j++){map[i][j]= (i==j)? 0:INF;}}for(i=1;i<=n;i++){temp=sc.nextInt();for(j=1;j<=temp;j++){temp2=sc.nextInt();temp3=sc.nextInt();map[i][temp2]=temp3;}}floyd();int min=INF;int max;int number = 0;for(i=1;i<=n;i++){max=Integer.MIN_VALUE;for(j=1;j<=n;j++){if(map[i][j]>max)max=map[i][j];}if(max!= INF && max!=0 && max<min){min=max;number=i;}}if(min==INF)System.out.println("disjoint");elseSystem.out.println(number+" "+min);}}
}

Poj 1125 Stockbroker Grapevine(Floyd算法求结点对的最短路径问题)相关推荐

  1. POJ 1125 Stockbroker Grapevine

    题意:有n个人,传播谣言,每个人向其他人传播的时间作为边权,构成一个有向图,问把谣言告诉谁能最快传到所有人,输出这个人和最短时间. 解法:最短路.一个人传到所有人的最短时间即他到所有人最短路的最大值, ...

  2. poj1125 Stockbroker Grapevine Floyd算法

    问题描述 Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of ...

  3. poj 1125 Stockbroker Grapevine(Folyd)

    1 //nyoj的数据改成了1000 ,然后就跪了.. 好像大神们用spfa做的 2 #include<iostream> 3 #include<cstdio> 4 #incl ...

  4. Floyd算法求无向图最小环

    原理可看菊苣博文:http://www.cnblogs.com/khan724/p/4383686.html 自己代码中解释一些小细节.该算法适用于无向图,而有向图的最小环,实际上就是初始化所有点为i ...

  5. poj 1125 Stockbroker(多源最短路径)

    题目来源:POJ 1125 简单题目分析及思路: 题意比较难懂,但是思路是多源最短路径,采用Floyd算法. Floyd是一种动态规划的算法,代码简洁易懂,对于稠密图效率要高于Dijkstra算法,但 ...

  6. 动态规划 - Floyd算法求最短路径 - (Matlab建模)

    Floyd算法又称为弗洛伊德算法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

  7. Floyd算法求最短路径(附代码实例)

    Floyd算法 使用范围: 1)求每对顶点的最短路径; 2)有向图.无向图和混合图; 算法思想: 直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1), D(2), -, D(n) ...

  8. Floyd算法求最小环

    /**算法引入:*求一个图G中的最小环路的朴素算法为:每次找到一条边,删除了求这两点之间的最短路径;*若能求出,则这条最短路径与原来的边构成一个环,不过时间复杂度略高;**算法思想;*Floyd算法是 ...

  9. Floyd算法求最短路

    Floyd算法(基于动态规划):用于求多源汇最短路 初始化:用邻接矩阵d[i,j]存储中所有的边,floyd算法就是三重循环 for(k = 1;k <= n;k ++){ for(i = 1; ...

最新文章

  1. python3中的dict循环性能对比
  2. golang之iota
  3. php 是否包含 大写,PHP检查字符串中是否包含大写字符
  4. python多线程与多进程
  5. 多核Cache一致性 伪共享 atomic的实现和cache相关的部分
  6. 遇见更好的自己 -- 90后农村姑娘非洲四年驻外生涯,和她的学渣“逆袭”川大的人生故事
  7. SecureCRT http代理设置
  8. 【零基础跑项目】20代码教你基于opencv的人脸检测
  9. 和平精英镜头灵敏度怎么调到最稳呢
  10. 2023注册会计电子版教材
  11. 不需要密码卸载Symantec Endpoint Protection的步骤
  12. 从软件生命周期看应用安全(网络安全)
  13. Vegas Pro 16中文版
  14. 高速公路隧道交通安全设施的设置、管理要点
  15. android OS系统如何适配蓝牙遥控器
  16. 东北林业大学Acm培训大一(三)(暴力枚举)
  17. Oracle EBS FA摊销调整框控制逻辑
  18. 如何处理G120变频器的F08501故障
  19. 基于单片机的智能照明系统
  20. ALOS PALSAR-2数据读取与格式转换

热门文章

  1. 小荷才露尖尖角,和Flutter应用说你好
  2. python绘图——绘制正负区分的柱形图[ax.bar()]
  3. 腾讯云服务器的项目部署
  4. STM32 JTAG SWD (PB3 PB4用作普通IO)及启动模式
  5. WMS仓储系统能给企业带来哪些帮助?
  6. 服务网格在百度核心业务大规模落地实践
  7. python2 x和python3 x_python2.x 和python3.x 哪个比较好?老男孩Python
  8. codeforces 1090B切题记录
  9. 最新 955 不加班的公司名单(2022 版)
  10. av发行商_如何向发行商推销游戏