并查集 (学习笔记)(25.11.18)
并查集 (学习笔记)
基础并查集
概述
通过递归和树形结构,实现对于某些点的合并,使其在合成完毕后可以使用\(O(logn)\),\(O(1)\)时间完成查询
实现操作
find数组
int find(int x){ if(fa[x] == x) return x; else return find(fa[x]); }
路径压缩优化
void add(int x, int y){ x = find(x), y = find(y); if(x==y) continue; fa[x] = y; }
按秩合并优化
可以理解为将两个结构去合并的时候,较短的去与长的相连,可以做到优化,所以我们可以想到,去做一个size的记录,之后在合并的时候判断
void add(int x, int y){ x = find(x), y = find(y); if(x==y) continue; if(siz[y] < siz[x]) swap(x,y); if(siz[x] == siz[y]) siz[y] = siz[x]+1; fa[x] = y; }

浙公网安备 33010602011771号