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

并查集

并查集顾名思义就是有“合并集合”和“查找集合”两种操作的有关于数据结构的一种算法。
并查集是一种树形的数据结构,用于处理一些不相交集合的合并以及查找等问题。常常在使用中以森林来表示。
算法
用集合中的某个元素来代替这个集合,该元素称为集合的代元素。
一个集合内的所有元素组织称为以代表元为根的树形结构。
对于每一个元素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;
}
posted @ 2017-05-17 17:42  南风古  阅读(111)  评论(0编辑  收藏  举报