`
Simone_chou
  • 浏览: 192576 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Stockbroker Grapevine(Floyd)

    博客分类:
  • POJ
 
阅读更多
Stockbroker Grapevine
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 27232   Accepted: 15090

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,代表有 n 个人,后有 n 行,每行首先有个 num,代表能传给 num 个人谣言,后给出 num 对数,分别代表传给人的编号和时间。现由一个人传开谣言,使之传播时间最少,输出起点还有时间。如果不存在这个人,则输出 disjoint。

 

      思路:

      Floyd 后,每个人都判断一遍即可,每个人的传播时间为 “ 传向除了自己的其他人中的最大所需时间 ” 。

 

      AC: 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;

const int INF = 99999999;

int G[110][110];

void floyd (int n) {
    for (int k = 1; k <= n; ++k) {
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (G[i][j] > G[i][k] + G[k][j])
                    G[i][j] = G[i][k] + G[k][j];
            }
        }
    }
}

int main() {
    int n;

    while (~scanf("%d", &n) && n) {

        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= n; ++j) {
                G[i][j] = INF;
                if (i == j) G[i][j] = 0;
            }
        }

        for (int i = 1; i <= n; ++i) {
            int num;
            scanf("%d", &num);
            while (num--) {
                int k, t;
                scanf("%d%d", &k, &t);
                G[i][k] = min(t, G[i][k]);
            }
        }

        floyd(n);

        int min_time = INF, ans;
        for (int i = 1; i <= n; ++i) {
            int max_time = 0;
            for (int j = 1; j <= n; ++j) {
                if (j == i) continue;
                max_time = max(max_time, G[i][j]);
            }

            if (min_time > max_time) {
                min_time = max_time;
                ans = i;
            }
        }

        if (min_time == INF) printf("disjoint\n");
        else printf("%d %d\n", ans, min_time);
    }

    return 0;
}

 

分享到:
评论

相关推荐

    POJ1125-Stockbroker Grapevine【Floyd】

    【标题】"POJ1125-Stockbroker Grapevine【Floyd】"是一个编程竞赛题目,来源于北京大学的在线评测系统POJ(Problem Online Judge)。该题目主要涉及图论算法中的Floyd-Warshall算法。 【描述】"北大POJ1125-...

    ACM Stockbroker Grapevine源码

    ACM 题目 Stockbroker Grapevine的c++源码

    Pku acm 第1125题 Stockbroker Grapevine c代码

    Pku acm 第1125题 Stockbroker Grapevine c代码,有详细的注释,动态规划,使用弗洛伊德算法

    北京大学OJ题目详细分类

    5. **1125 Stockbroker Grapevine FLOYD** - **知识点**: 图论中的最短路径算法 - **解析**: 此题同样采用了弗洛伊德算法来解决所有顶点间的最短路径问题。在具体场景下,可能涉及到股票交易网络中的信息传播速度...

    floyd.zip_数值算法/人工智能_Visual_C++_

    文件列表中的"Stockbroker Grapevine(Floyd算法).cpp"是C++源代码文件,很可能包含了实现Floyd算法的代码,用于处理上述的股票市场分析问题。而"Stockbroker Grapevine(Floyd算法).exe"则是编译后的可执行文件,用户...

    poj经典动态规划题目解题报告

    poj经典动态规划题目解题报告,包括经典的动态规划题目20多道,可以作为学习动态规划系统的资料,包括题目: Pku acm 1179 Polygon Pku acm 1125 Stockbroker Grapevine Pku acm 1160 post office Pku ...

    数据结构中图的全部运算

    Stockbroker Grapevine则可能与网络流或最大匹配问题有关,模拟股票交易中的信息传递或资源分配。 首先,我们深入探讨红黑树。红黑树的特性包括每个节点都带有颜色属性(红色或黑色)、根节点是黑色、每个叶节点...

    daytrader.stockbroker.zip

    标题 "daytrader.stockbroker.zip" 暗示我们正在处理一个与股票交易相关的 Android 应用程序项目,其中可能包含用于与服务器交互的代码。描述指出这是关于在 Android 应用程序中使用 Internet 数据,这通常涉及到...

    pku题目分类

    - **题目编号**:1125 Stockbroker Grapevine, 1141 Brackets Sequence, 1160 Post Office, 1163 The Triangle - **描述**:这些题目通常涉及到图的遍历、最短路径等问题。 - **示例**: - **1125 Stockbroker ...

    算法分类以及POJ题目分类

    3. 1125 Stockbroker Grapevine:涉及股票交易策略,需要考虑时间序列上的决策。 4. 1141 Brackets Sequence:与括号匹配相关,可以使用动态规划来确定合法括号序列。 5. 1160 Post Office:经典的最短路径问题,...

    poj题目分类...

    * 1125 Stockbroker Grapevine * 1141 Brackets Sequence * 1159 Palindrome * 1160 Post Office * 1163 The Triangle * 1458 Common Subsequence * 1579 Function Run Fun * 1887 Testing the CATCHER * 1953 World...

    poj题目类型总结(每题用到的算法)

    - **1125 (Stockbroker Grapevine)**:本题是一道经典的贪心问题,要求通过贪心策略最大化股票交易利润。 ### 4. 图论 - **1024, 1167, 1708, 1746, 1775, 1878, 1903, 1966, 2046, 2197, 2349**:这部分题目主要...

    POJ各题算法分类和题目推荐 ACM必看

    * 1125 Stockbroker Grapevine:本题目使用动态规划来计算股票交易的最大收益。 * 1141 Brackets Sequence:本题目使用动态规划来计算括号序列的最长长度。 * 1159 Palindrome:本题目使用动态规划来计算回文串的...

    ACM题解(英文的题目,中文的答案讲解)

    5. **Stockbroker Grapevine** 这可能是一个关于股票交易或者信息传播的模拟问题,可能需要用到数据结构如队列或堆来处理股票价格的变化,或者使用图的遍历算法来模拟信息的传播过程。 6. **World Cup Noise** ...

    poj图论题目汇总

    #### 1125 Stockbroker Grapevine - Floyd - **知识点**:Floyd算法用于求解所有顶点对之间的最短路径问题。 #### 1135 Domino Effect - 最短路 - **知识点**:最短路径算法,如Dijkstra或Bellman-Ford等,用于...

    ACM竞赛主流算法总结

    - 1125 Stockbroker Grapevine: 找出股票交易的最佳策略。 - 1163 The Triangle: 计算三角形中的最小路径和。 #### 3. 贪心算法 贪心算法在每一步选择中都采取在当前状态下最好或最优的选择,以希望导致结果是全局...

    北京大学acm题库 题目分类

    相关题目有:1037 A decorative fence、1050 To the Max、1088 滑雪、1125 Stockbroker Grapevine、1141 Brackets Sequence、1159 Palindrome、1160 Post Office、1163 The Triangle、1458 Common Subsequence、1579...

    ACM POJ PKU 最全题目分类

    17. **1082 - Stockbroker Grapevine**:股票经纪问题。 18. **1085 - Alien Security**:外星人安全问题。 19. **1097 - Code the Tree**:树编码问题。 20. **1060 - Sorting It All Out**:排序问题。 21. **1105...

    acm ZJU分类

    - **1082 Stockbroker Grapevine**: 经纪人消息传播问题,可能涉及到图论中的最短路径算法。 - **1085 Alien Security**: 外星人安全问题,考虑图论中的最短路径算法。 - **1097 Code the Tree**: 编码问题,涉及树...

    ZJU_ACM_All_Anwer 搞编程的都知道的浙江大学A 题库.本书 集了所有经 Z 题解集,集合并附 Mathimaticsumerical algorithms 数值算法

    ZJU_Main 主页 下一页 ZJU 题型分类 文演整理版 2008-3-23 数论: 1007 Numerical Summation of a Series 简单题,还是蛮有意思的 1045 HangOver 简单题 ... 1049 I Think I Need a Houseboat 简单题 ...

Global site tag (gtag.js) - Google Analytics