一句话理解
merge 把两个集合合成一个。
为什么要学
先找两个根,再挂在一起。
讲解
if (find(x)!=find(y)) fa[find(x)]=find(y); 可按秩或按大小挂。
例子
void merge(int x, int y) {
x = find(x); y = find(y);
if (x != y) fa[x] = y;
}
只改根的父亲。
常见错误
- 不 find 就挂,挂到非根上。
- 已经同一集合还乱挂形成环(无路径压缩时)。
第 285 课
merge 把两个集合合成一个。
先找两个根,再挂在一起。
if (find(x)!=find(y)) fa[find(x)]=find(y); 可按秩或按大小挂。
void merge(int x, int y) {
x = find(x); y = find(y);
if (x != y) fa[x] = y;
}
只改根的父亲。
合并前应先找到两个根。
Ctrl / ⌘ + Enter 运行 · Tab 缩进
左右方向键也可翻课