• poj2485(Kruskal)


    这道题显然是一道最小生成树的问题,参考算法导论中的Kruskal方法,先对路径长度进行排序,然后使用并查集(Disjoint Set Union)来判断节点是否连通,记录连接所有节点的最后一条路径的长度即为最大的长度了。

    下面的并查集算法还可以通过设置rank数组记录节点的等级来进一步优化。总的来说还是一道简单题。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    struct Edge{
        int x, y;
        int dis;
    };
    
    int pre[501];
    
    int find(int x)
    {
        int r = x;
        while (pre[r] != r){
            r = pre[r];
        }
        int i = x, j;
        while (i != r){
            j = pre[i];
            pre[i] = r;
            i = j;
        }
        return r;
    }
    
    bool joint(int x, int y)
    {
        int xRoot = find(x),
            yRoot = find(y);
        if (xRoot == yRoot)
            return false;
        pre[xRoot] = yRoot;
        return true;
    }
    
    bool cmp(Edge e1, Edge e2)
    {
        return e1.dis < e2.dis;
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while (t--){
            int n;
            Edge edge[25001];
            scanf("%d", &n);
            for (int i = 0; i < n; i++){
                pre[i] = i;
            }
            int cnt = 0;
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++){
                    int dis;
                    scanf("%d", &dis);
                    if (i > j)continue;
                    edge[cnt].x = i;
                    edge[cnt].y = j;
                    edge[cnt++].dis = dis;
                }
            }
            sort(edge, edge + cnt, cmp);
            int max = -1;
            for (int i = 0; i < cnt; i++){
                if (joint(edge[i].x, edge[i].y)){
                    max = edge[i].dis > max ? edge[i].dis : max;
                }
            }
            printf("%d
    ", max);
        }
        return 0;
    }
  • 相关阅读:
    Spark-sql windows 下 执行错误.
    notepad ++ 注册表
    log4j 配置文件 示例
    linux 查看 进程 内存占用
    spring boot 常见错误解决
    python 轻量 web 框架 Bottle 使用
    Spring cloud eureka 添加 spring-security
    vue can‘ not resolver sass-loader 的 解决办法。
    外国人眼中的珍珠奶茶是啥?
    75.2亿美元:诺基亚、微软终于在一起
  • 原文地址:https://www.cnblogs.com/caiminfeng/p/4897355.html
Copyright © 2020-2023  润新知