• POJ1125 Stockbroker Grapevine 最短路


    这题要处理的地方的就是一个人可以同时向多个人传递消息,也就是说一条消息的传递时间由最长的那一条路径所决定,因为可以同时进行嘛,所以就求某一点到所有点的最短路,然后再寻找一条最长的路劲,枚举每个顶点作为起点就可以了。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    #include<cstring>
    #include<vector>
    #include<string>
    #define inf 0x3f3f3f3f
    #define LL long long
    using namespace std;
    
    int N, G[105][105], dis[105], vis[105];
    
    bool Dijkstra(int s, int &ret) {
        int pos, Min;
        ret = 0;
        memset(dis, 0x3f, sizeof (dis));
        memset(vis, 0, sizeof (vis));
        dis[s] = 0;
        for (int i = 1; i <= N; ++i) {
            Min = inf;
            for (int j = 1; j <= N; ++j) {
                if (!vis[j] && Min > dis[j]) {
                    pos = j, Min = dis[j];
                }
            }
            if (Min == inf) {
                return false;
            } else {
                vis[pos] = 1;
                for (int j = 1; j <= N; ++j) {
                    if (!vis[j] && G[pos][j] != inf && dis[j] > dis[pos] + G[pos][j]) {
                        dis[j] = dis[pos] + G[pos][j];    
                    }
                }
            }
        }
        for (int i = 1; i <= N; ++i) {
            ret = max(ret, dis[i]);    
        }
        return true;
    }
    
    int main()
    {
        int a, b, M, flag, Min, num, ret;
        while (scanf("%d", &N), N) {
            flag = 0;
            Min = inf;
            memset(G, 0x3f, sizeof (G));
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &M);
                for (int j = 1; j <= M; ++j) {
                    scanf("%d %d", &a, &b);
                    G[i][a] = b;
                }
            } 
            for (int i = 1; i <= N; ++i) {
                int t;
                if (Dijkstra(i, t)) {
                    flag = 1;
                    if (Min > t) {
                        Min = t, num = i;
                    }
                }
            }
            if (!flag) puts("disjoint");
            else printf("%d %d\n", num, Min);
        }
        return 0;
    }
  • 相关阅读:
    基本IO流
    解决重载logf4j2配置文件问题
    vue-element-admin(1)
    asp.net 获取客服端ip,服务端ip
    页面传值
    C#基本语法复习-使用索引器
    C#基本语法复习-属性
    C#基本语法复习-使用垃圾回收和资源管理
    C#基本语法复习-创建接口和定义抽象类
    C#基本语法复习-使用继承
  • 原文地址:https://www.cnblogs.com/Lyush/p/2705242.html
Copyright © 2020-2023  润新知