并查集

作者: 华雨欣 | 来源:发表于2020-11-10 16:04 被阅读0次

    用途

    并查集包含合并、查询两种操作,可以接近O(1)的复杂度判断两个元素是否属于同一个集合,通常在最小生成树、查看两个元素是否属于同一个集合(图的连通)、合并集合、集合个数(图的连通分量个数)中均有使用。

    模板

    int[] p;//并查集
    
    int find(int x){
        if(x != p[x]) p[x] = find(p[x]);
        return p[x];
    }
    
    void union(int x, int y){
        int px = find(x), py = find(y);
        p[px] = py;
    }
    

    当然还有带权并查集、秩优化等等,就根据题目适当变通即可。
    另:个人习惯将合并方法直接拿出来写在调用的位置; 在初始化时 p[i] = i;

    相关文章

      网友评论

          本文标题:并查集

          本文链接:https://www.haomeiwen.com/subject/hyclbktx.html