zoukankan      html  css  js  c++  java
  • 并查集模板

    图解并查集

    并查集的作用就是把一个数据集分成若干个子集,每个子集内部数据可以互联互通,而子集之间则不具有连通性。
    并查集的底层结构类似于堆,也是用数组描述一种树结构,但不同的是,堆是一棵独立的二叉树,并查集的树是多叉树,而且可能不止一棵树(也就是森林)。
    在并查集中,我们把相互独立的数据集称为连通分量,连通分量在逻辑上可以形象地描述为一棵树,每棵树都有一个根节点,其他的元素都会直接或间接指向根节点。

    class UnionFind {
    private:
        int count;
        vector<int> parent;
    public:
        UnionFind(int n) : parent(n) {
            count=n;
            for (int i=0;i<n;i++) {
                parent[i]=i;
            }
        }
    
        /* 查找根节点 */
        int findRoot(int x) {
            if (x!=parent[x]) {
                parent[x]=findRoot(parent[x]);
            }
    
            return parent[x];
        }
    
        /* 合并操作 */
        void unionRoot(int x, int y) {
            int root_x=findRoot(x);
            int root_y=findRoot(y);
            if (root_x != root_y) {
                parent[root_x]=root_y;
                count--;
            }
        }
    
        /* 判断x,y是否属于同一连通分量 */
        bool isConnect(int x, int y) {
            return findRoot(x)==findRoot(y);
        }
    
        /* 返回连通分量个数 */
        int getCount() {
            return count;
        }
    };
    
  • 相关阅读:
    HashTable, HashMap,TreeMap区别
    redis的多线程
    五种I/O模型介绍
    SpringBoot的优点
    spring注解
    三种方法求解两个数组的交集
    数据库七种传播行为
    BETA 版冲刺前准备
    Python学习笔记(二)--变量和数据类型
    事后诸葛亮
  • 原文地址:https://www.cnblogs.com/hunter-w/p/15045000.html
Copyright © 2011-2022 走看看