tips:以下内容不保证可以使用

普通
const int N=1e5+5;
int f[N],size[N];
int find(int x){
	if(x==f[x])return x;
	return f[x]=find(f[x]);
}
void join(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy)f[fx]=fy;
}
启发式合并
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int f[N],size[N];
int find(int x){
	if(x==f[x])return x;
	return f[x]=find(f[x]);
}
void join(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy){
		if(size[fx]>size[fy])swap(fx,fy);
		f[fx]=fy;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)f[i]=i,size[i]=1;
	return 0;
}

2 条评论

  • @ 2024-10-18 20:19:46

    1+1=2

    • @ 2024-10-18 20:17:25

      应该也许大概可能

      里面没问题
      🤡 2
      🌿 2
      👀 1
      🤣 1
      👍 1
      • 1