- 分享
并查集 模板
- 2024-10-18 20:16:22 @
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 条评论
-
lfy53 LV 6 @ 2024-10-18 20:19:46
1+1=2 -
2024-10-18 20:17:25@
应该也许大概可能
里面没问题
🤡 2🌿 2👀 1🤣 1👍 1
- 1