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

    使用并查集时,首先会存在一组不相交的动态集合 $S = left{ {{S_1},{S_2}, cdots ,{S_k}} ight}$,一般都会使用一个整数表示集合中的一个元素。

    每个集合可能包含一个或多个元素,并选出集合中的某个元素作为代表。每个集合中具体包含了哪些元素是不关心的,具体选择哪个元素作为代表一般也是不关心的。我们关心的是,对于给定的元素,可以很快的找到这个元素所在的集合(的代表),以及合并两个元素所在的集合,而且这些操作的时间复杂度都是常数级的。

    并查集主要包含三个操作:
    1.  makeSet

    2.  unionSet

    3.  find

    int maxn=10010;
    int f[maxn],rank[maxn]; 
    
    void makeSet(int n){
        for(int i=0;i<=n;i++){
            f[i]=i;
            rank[i]=0;
        }
    }
    
    int find(int r){
        while(f[r]!=r)
        {
            f[x]=find(f[x]);    
        }
        return f[x];
    }
    
    void unionSet(int x,int y){
        x=find(x);y=find(y);
        if(x==y) return;
        if(rank[x]>rank[y]){
            f[y]=x;
        }
        else{
            if(rank[x]==rank[y]){
                rank[y]++;
            }
            f[x]=y;
        }
    }
  • 相关阅读:
    不弹出提示直接关闭页面
    orcale表解锁
    序列化和反序列化
    js 实现post传参
    简易实现 instanceOf
    简易实现virtualdom
    react中setState同步、异步问题
    CMake Qt 配置 OpenCV
    VS执行时打开cmd
    VS2019+Qt5.15.2环境配置
  • 原文地址:https://www.cnblogs.com/dynmi/p/11311759.html
Copyright © 2011-2022 走看看