Stockbroker Grapevine
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 38541   Accepted: 21502

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.

Sample Input

3
2 2 4 3 5
2 1 2 3 6
2 1 2 2 2
5
3 4 4 2 8 5 3
1 5 8
4 1 6 4 10 2 7 5 2
0
2 2 5 1 5
0

Sample Output

3 2
3 10

题目传送门:点击打开链接

题目大意:你是一个谣言传播者,有n个经济人,每个经纪人会给自己的朋友传播消息,传播消息需要时间,然后让你选择一个经纪人,算出传播消息的最短时间。

思路:一开始想到最小生成树,以为时间复杂度会不够,后来意识到,最小生成树是很多个人一起走,而这道题我一开始以为是要一个一个的传播(如果我有很多朋友,我先和这个说,再和那个说),那这就不是最小生成树了。(后来发现题目不是这样的,是你在传播消息的时候,你的朋友围着听,而不是一个接一个)。但即便是这样,用最小生成树时间复杂度应该也会很高,因为要枚举起点。看了题解之后发现是用弗洛伊德先求出最短路,然后对于每一个起点i,所有的d【i】【j】中最大的一个,就是从这个起点开始传播到所有人的时间,所以对于每一个起点,遍历每一个终点,保存最小值就可以了,最小值是INF,说明有人是失联的,输出disjoint。

理解了题意就是水题了,上代码。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<math.h>
#include<cmath>
#include<time.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
#include<numeric>
#define ll long long
using namespace std;
const int maxn=110;
const int INF=0x3f3f3f3f;
int d[maxn][maxn],n;
int main() {
while(scanf("%d",&n),n) {
memset(d,INF,sizeof(d));
for(int i=1;i<=n;i++){
d[i][i]=0;
int m;
scanf("%d",&m);
while(m--){
int v,len;
scanf("%d%d",&v,&len);
d[i][v]=len;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
if(d[j][k]>d[j][i]+d[i][k]){
d[j][k]=d[j][i]+d[i][k];
}
}
}
}
int minn=INF;
int p;
for(int i=1;i<=n;i++){
int maxx=0;
for(int j=1;j<=n;j++){
if(i==j)continue;
maxx=max(d[i][j],maxx);
}
if(maxx<minn){
minn=maxx;
p=i;
}
}
if(minn==INF)printf("disjoint\n");
else printf("%d %d\n",p,minn);
}
}

poj1125传播谣言(弗洛伊德,求最长路)的更多相关文章

  1. spfa求最长路

    http://poj.org/problem?id=1932 spfa求最长路,判断dist[n] > 0,需要注意的是有正环存在,如果有环存在,那么就要判断这个环上的某一点是否能够到达n点,如 ...

  2. 训练赛 Grouping(强连通分量缩点 + DAG求最长路)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=158#problem/F 大致题意:给出n个人和m种关系(ti,si),表示ti ...

  3. XYZZY(spfa求最长路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  4. 【HDOJ1217】【Floyd求最长路】

    http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. hdu 1534(差分约束+spfa求最长路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...

  6. POJ 3592--Instantaneous Transference【SCC缩点新建图 &amp;&amp; SPFA求最长路 &amp;&amp; 经典】

    Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6177   Accep ...

  7. POJ - 3249 Test for Job (在DAG图利用拓扑排序中求最长路)

    (点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权 ...

  8. Vulnerable Kerbals CodeForces - 772C【拓展欧几里得建图+DAG上求最长路】

    根据拓展欧几里得对于同余方程 $ax+by=c$ ,有解的条件是 $(a,b)|c$. 那么对于构造的序列的数,前一个数 $a$  和后一个数 $b$ ,应该满足 $a*x=b(mod m)$ 即 $ ...

  9. HDU - 6201 transaction transaction transaction(spfa求最长路)

    题意:有n个点,n-1条边的无向图,已知每个点书的售价,以及在边上行走的路费,问任选两个点作为起点和终点,能获得的最大利益是多少. 分析: 1.从某个结点出发,首先需要在该结点a花费price[a]买 ...

  10. 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路

    题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...

随机推荐

  1. Internet Intranet Extranet

    Internet: There's only one of it, and you're on it now. Intranet: An internal network local to a com ...

  2. windows下启动命令行

    1.当前目录打开命令窗口:shift+鼠标右键,然后打开命令窗口 2.查看监听的端口:netstat – ano

  3. elasticsearch2.x ik插件

    先来一个标准分词(standard),配置如下: curl -XPUT localhost:/local -d '{ "settings" : { "analysis&q ...

  4. pageBean实现分页

    PageBean类 package com.xujingyang.domain ; import java.util.List ; /** * @author oldmonk * @date 2017 ...

  5. p2501 [HAOI2006]数字序列

    传送门 分析 https://www.luogu.org/blog/FlierKing/solution-p2501 对于第二问的感性理解就是有上下两条线,一些点在上面的线的上面或者下面的线的下面,然 ...

  6. CodeForces 782B The Meeting Place Cannot Be Changed (二分)

    题意:题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间. 析:二分时间,然后求并集,注意精度,不然会超时. 代码如下: #pragma comment(linker, "/S ...

  7. super-smack

    我有个办法,不过不是用LR,是用super-smack,如果只对数据库进行抗压力测试,应该管用.Super-smack 现在是1.3版,源码下载地址如下:http://vegan.net/tony/s ...

  8. Linux常用命令分类总结

    文件及文件夹操作 新建文件 vi file 新建文件夹 mkdir dirName 复制文件 cp sourceFile targetFile 移动文件 mv file targetDir 文件或文件 ...

  9. ElementUI的表单和vee-validate结合使用时发生冲突的解决

    在Vue项目中使用ElementUI表单时,同时又引入了vee-validate进行使用的时候,在浏览器上会出现这样的报错: [Vue warn]: The computed property &qu ...

  10. C#中IDisposable的用法-垃圾回收

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...