#include <iostream>
using namespace std;

const int N = 1000;
int p[N],rank[N];
void init(int n){//把每个点所在集合初始化为其自身
 for(int i=1;i<=n;i++){
  p[i]=i;
  rank[i]=0;
 }
}

int find(int i){//查找元素所在的集合,即根节点
 if(p[i]!=i)
  p[i]=find(p[i]);
 return p[i];
}

void merge(int i, int j){//将两个元素所在的集合合并为一个集合。
 i=find(i);
 j=find(j);
 if(i==j) return ;//合并之前,应先判断两个元素是否属于同一集合
 if(rank[i]>rank[j]){
  p[j]=i;
 }
 else if(rank[i]<rank[j]){
  p[i]=j;
 }
 else{
  p[j]=i;
  rank[i]++;
 }
}

int main(){
 return 0;
}

相关文章:

  • 2021-10-31
  • 2021-11-26
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
猜你喜欢
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
  • 2021-06-13
  • 2021-06-16
相关资源
相似解决方案