1.并查集为什么叫“并查集”这个名字?
因为并查集它的主要用处就是并(合并无交集集合)和查(查找元素或判断是否有该元素),当然路径压缩也得用到它。话说回来,并查集虽然是图论里的东西,但是本身像个树。
2.算法
说到并查集,就不得不提到压缩路径了,它是一个超级简单,但是很牛的算法,算法主要是先定义一个存储任意支点的父亲节点,(根节点的是他本身)遍历任意一个支点时,通过递归,来向上搜索,最后返回根节点,在回溯的途中,直接将自己的长辈节点们全部变成祖先的儿子,于是,(自己的长辈变成了哥哥和弟弟)根节点直接连接大部分以自己为祖先的节点,效率变高。
通常,在代码中,存父亲节点时,通常会用一个f[]数组。
int f[1e1000];
压缩路径(code)
int father[1e100];
int find(int x){
if(father[x]==x)return x;
return father[a]=find(father[a]);
}
当然,并查集也可以合并集合。
就是直接将别人的祖先变成自己的祖先。
(code)
void merge(int x,int y){
int p1=find(x);
int p2=find(y);
if(p1!=p2) f[p1]=f[p2]
}
标签:看得懂,int,查集,father,节点,老太太,p1,find
From: https://blog.csdn.net/2201_75683257/article/details/141055620