初学并查集知识总结后续增加

来源:互联网 发布:网络直播学校 编辑:程序博客网 时间:2024/06/06 01:21

并查集

并查集顾名思义就是有“合并集合”和“查找集合”两种操作的有关于数据结构的一种算法。
并查集是一种树形的数据结构,用于处理一些不相交集合的合并以及查找等问题。常常在使用中以森林来表示。
算法
用集合中的某个元素来代替这个集合,该元素称为集合的代元素。
一个集合内的所有元素组织称为以代表元为根的树形结构。
对于每一个元素parent[x]指向x的树形结构上的父亲节点。如果x是根节点,则令parent[x]=x.
对于查找操作,假设需要确定x所在的集合,也就是确定集合的代表元。可以沿着parent[x]不断的在树形结构上移动,直到到达跟节点。(判断两个元素是否在一个集合,只需要看他们的代表元是否相等即可,也就是根节点是否相同即可。)
路径压缩
为了加快查找速度,查找时间将x到根节点路径上的所有点的parent都设为根节点,这就是压缩路径。
具体实例
南阳oj 题目一笔画问题,题解用并查集加欧拉图 题目分析点这里
核心代码

//初始化并查集 比较重要void init(){    for(int i=1;i<=n;i++)        father[i]=i;}//获取根节点int getfather(int x){    while(x!=father[x])        x=father[x];    return x;}//压缩路径获取根节点int getfather(int x){    if(x!=father[x])        father[x]=getfather(father[x]);//路径的压缩修改 递归回溯    return father[x];}//合并俩个元素所在的集合void union(int x,int y){    x=getfather(x);    y=getfather(y);    if(x!=y)        father[x]=y;}
原创粉丝点击