一、find操作
//find操作路径压缩版
inline int find(int x){
if(fa[x]==x) return x;
int t=find(fa[x]);
fa[x]=t;
return t;
}
二、merge操作
//此处为正常版,启发式的merge在大多数题中不需要。
//一般配合find使用,find路径压缩已经够快了(除毒瘤)
//再说,启发式merge写起来很费代码量
inline void merge(int x,int y){
x=find(x);
y=find(y);
if(x==y) return;
fa[x]=y;
}
Note:
一般在使用的时候,find路径压缩和merge配合使用。
而在初始化的时候,
不要忘了:
memset(fa,0,sizeof(fa));
for(int i=1;i<=n;i++) fa[i]=i;