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

    不知道说些啥

    #include<bits/stdc++.h>
    using namespace std;
    const int N=500010;
    int f[N];
    int dep[N],siz[N];
    int n,m;
    int F(int x){//递归版路径压缩 
        if(f[x]==x)return x;
        f[x]=F(f[x]);
        return f[x];
    }
    int F(int x){//非递归版路径压缩 
        if(f[x]==x)return x;
        int goal=x;
        while(f[goal]!=foal)goal=f[goal];
        int from=x;
        while(f[from]!=from){
            int to=f[from];
            f[from]=goal;
            from=to;
        }
        return goal;
    }
    //路径压缩改变了树的父子关系 不可逆 
    void U(int x,int y){//按秩合并(秩为深度)
        int A=F(x);
        int B=F(y);
        if(A!=B){
            if(dep[A]<dep[B])swap(A,B);
            f[B]=A;
            dep[A]=max(dep[A],dep[B]+1);
        }
    }
    void U(int x,int y){//按秩合并(秩为大小)
        int A=F(x);
        int B=F(y);
        if(A!=B){
            if(siz[A]<siz[B])swap(A,B);
            f[B]=A;
            siz[A]+=siz[B];
        }
    }
    //按秩合并改变了树的形态 可逆 
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            f[i]=i;
        }//初始化 
        for(int i=1;i<=m;i++){
            int x,y;
            scanf("%d%d",&x,&y);
            U(x,y);
        } 
    }
    quick union

    可能还有些骚操作 待补

  • 相关阅读:
    PAT(乙级)1007
    PAT(乙级)1006
    PAT(乙级)1005
    PAT(乙级)1004
    C算法实现:将字符串中的数字返回为整型数
    PAT(乙级)1002
    PAT(乙级)1001
    NOI接水问题
    【BZOJ】【2756】【SCOI2012】奇怪的游戏
    【BZOJ】【2631】Tree
  • 原文地址:https://www.cnblogs.com/passione-123456/p/12273748.html
Copyright © 2011-2022 走看看