并查集的作用:
1.合并两个集合
2.查询某个元素的祖宗节点
3.记录每个集合大小,将集合大小绑定到根节点
4.记录每个点到根节点的距离,将距离绑定到每一个元素身上
模板
//并查集的核心操作,寻找根节点祖先 + 路径压缩
//如果这个集合的父节点指向的不是自己,说明不是根节点,递归寻找
//最后找到根节点之后,把路径上的所有集合都指向根节点(带权并查集)
public static int find(int x) {
if (p[x] != x)
p[x] = fin(p[x]);
return p[x];
}
//合并:让a的祖宗节点的父节点为b的祖宗节点
p[find(a)] = find(b);