常规并查集模板

Posted popodynasty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常规并查集模板相关的知识,希望对你有一定的参考价值。

常规并查集

模板

#define Maxsize 100+1
int f[Maxsize];

void init(int n){
  for(int i = 1; i <= n; i++)
    f[i] = i;
}

int find_f(int a){
  if(f[a] == a){
    return a;
  }else{
    return f[a] = find_f(f[a]);
  }
}

void union_f(int a,int b){
  int af = find_f(a);
  int bf = find_f(b);
  f[bf] = af;
}

bool same_f(int a,int b){
  return find_f(a) == find_f(b);
}

按秩合并

可以提高效率,减少路径压缩

#define Maxsize 100+1

int f[Maxsize];
int r[Maxsize];

void init(int n){
  for(int i = 1; i <= n; i++){
    f[i] = i;
    r[i] = 0;
  }
}

int find_f(int a){
  if(f[a] == a){
    return a;
  }else{
    return f[a] = find_f(f[a]);
  }
}

int union_f(int a,int b){
  int af = find_f(a);
  int bf = find_f(b);
  
  if(r[af] > r[bf]){
    f[bf] = af;
  }else if(r[af] < r[bf]){
    f[af] = bf;
  }else{
    f[bf] = af;
    r[af]++;
  }
}

int same_f(int a,int b){
  return find_f(a) == find_f(b);
}

以上是关于常规并查集模板的主要内容,如果未能解决你的问题,请参考以下文章

并查集模板并查集模板 luogu-3367

洛谷P3402 模板可持久化并查集(可持久化线段树,线段树)

bzoj2049 线段树 + 可撤销并查集

Tarjan 模板,高级并查集

并查集题目模板及java代码

并查集模板(洛谷——模板并查集)