zoukankan      html  css  js  c++  java
  • 初学并查集知识总结后续增加

    并查集

    并查集顾名思义就是有“合并集合”和“查找集合”两种操作的有关于数据结构的一种算法。
    并查集是一种树形的数据结构,用于处理一些不相交集合的合并以及查找等问题。常常在使用中以森林来表示。
    算法
    用集合中的某个元素来代替这个集合,该元素称为集合的代元素。
    一个集合内的所有元素组织称为以代表元为根的树形结构。
    对于每一个元素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;
    }
  • 相关阅读:
    Linux学习
    PHP语法笔记
    iOS二次发育(swift)闭包
    iOS二次发育(swift)类
    iOS二次发育(swift)结构体
    iOS二次发育(swift)枚举
    【NOIP2013模拟联考14】隐藏指令
    【NOIP2012模拟8.9】逐个击破
    NOIP2020.9.19模拟patrick
    NOIP2020.9.19模拟 spongebob
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900164.html
Copyright © 2011-2022 走看看