-
路径压缩
将所有连通节点挂在同一个根节点上,相当于把一颗高度大于2的树压缩为高度为2的树。int find(vector<int> &parents, int index) { if(parents[index] != index) { parents[index] = find(parents, parents[index]); } return parents[index]; }
-
按秩合并
将秩小的树合并到秩大的树上,秩可以是树的深度,也可以是树的大小。void Union(vector<int> &parents, int index1, int index2, vector<int> &r) { int x = find(parents, index1); int y = find(parents, index2); if(x == y) return; if(r[x] < r[y]) swap(x, y); parents[y] = x; r[x] += r[y]; }
【笔记】并查集两种优化方式:路径压缩与按秩合并
最新推荐文章于 2023-05-12 16:29:23 发布