//复盘后补的并查集知识点,不全
并查集是一种数据结构,用于解决连通块问题。
支持两种操作:合并,查询
初始化:
int fa[MAXN]
inline void init(int n){
for(int i=1;i<=n;i++){
fa[i]=i;
}
}
合并:
//合并函数
inline void merge(int i,int j){
fa[find(i)]=find(j);
}
//find函数
int find(int x){
if(fa[x]==x){
return x;
}else{
return find(fa[x]);
}
}
三种优化方法:路径压缩,按秩合并,启发式合并(按大小合并)
求根节点的复杂度分别是O(1),O(logn),O(logn)
三种优化只能三选一!!!
路径压缩:会破坏树的结构
递归写法+三目运算符
int find(int x){
return x==fa[x]?x:(fa[x]=find(fa[x]));
}