概念:并查集是一种用来管理元素分组情况的数据结构。只可以进行合并操作但不可以进行分割操作。(是使用树形结构实现的,但不是二叉树)
用处:1、查询元素a和元素b是否属于同一组
2、合并元素a和元素b的组(合并)
1、查询一个点的根
需要注意的是,我们不找父亲节点,直接找到根
例如 6—4—7
我们直接
6
/ \
4 7
int find(int x){
return pre[x] == x?x:pre[x] = find(pre[x]);
}
2、合并
void merge(int x,int y){
int fx = find(x);
int fy = find(y);
if(fx == fy) return ;
else pre[fy] = fx;
}
3、查询集合数
查询集合数就是查询根的数
for(int i = 1;i<=n;i++) pre[i] = i;//初始化每个点的根,让他先等于自己
......//合并操作
int sum = 0;
for(int i=1;i<=n;i++){
if(pre[i] == i) sum++;
}
printf("%d\n",sum);
}