• POJ Stockbroker Grapevine(floyd)


    https://vjudge.net/problem/POJ-1125

    题意:

    题意不是很好理解,首先输入一个n,表示有n个股票经纪人,接下来输入n行,每行第一个数m为该股票经纪人认识的经纪人数,然后输入m对数(a,t),表示第i个经纪人把消息传给第a个经纪人所需要的时间。

    计算将消息传遍所有人所需要的最少时间。

    思路:

    起点任意,用floyd比较好。因为floyd求出的是每两点之间的最短路,所以最后计算最小时间时,需要先取最大值,比如说1号经纪人为起点,因为谁都可能为终点,所以枚举所有人,将最大时间作为最小时间,这个应该不难理解。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 const int maxn = 100 + 5;
     8 const int INF = 0x3f3f3f3f;
     9 
    10 int n;
    11 int d[maxn][maxn];
    12 
    13 
    14 void floyd()
    15 {
    16     for (int k = 1; k <= n;k++)
    17     for (int i = 1; i <= n;i++)
    18     for (int j = 1; j <= n; j++)
    19         d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
    20 }
    21 
    22 int main()
    23 {
    24     //freopen("D:\txt.txt", "r", stdin);
    25     int x, a, t;
    26     while (~scanf("%d", &n) && n)
    27     {
    28         for (int i = 1; i <= n; i++)
    29         {
    30             d[i][i] = 0;
    31             for (int j = 1; j < i; j++)
    32                 d[i][j] = d[j][i] = INF;
    33         }
    34 
    35         for (int i = 1; i <= n; i++)
    36         {
    37             scanf("%d", &x);
    38             while (x--)
    39             {
    40                 scanf("%d%d", &a, &t);
    41                 d[i][a] = t;
    42             }
    43         }
    44 
    45         floyd();
    46         int stock;
    47         int ans = INF;
    48         for (int i = 1; i <= n; i++)
    49         {
    50             int MAX = 0;
    51             for (int j = 1; j <= n; j++)
    52             {
    53                 if (i == j) continue;
    54                 MAX = max(MAX, d[i][j]);
    55             }
    56             if (ans > MAX)
    57             {
    58                 ans = MAX;
    59                 stock = i;
    60             }
    61         }
    62         if (ans == INF)
    63             printf("disjoint
    ");
    64         else
    65             printf("%d %d
    ", stock, ans);
    66     }
    67     return 0;
    68 }
  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6595972.html
Copyright © 2020-2023  润新知