首页 > 其他分享 >带权并查集

带权并查集

时间:2023-05-02 20:56:20浏览次数:42  
标签:元素 查集 fa 带权 集合 find

做了 cf 上一道题后发现我对并查集的理解不够深刻,顺带把带权并查集学一下。

并查集

初始化:对于一个集合 A 的所有元素,我们知道对于其中任意一个元素 i,i€A。此时,我们可以认为 i与 A 之间存在一条虚边,如果有新的元素要加入集合 A,将该元素与 A 建一条边即可。这条边我们用数组 fa[i] 表示,即点 i 和它的父亲。

加入:对于点 i,要加入点 j 所在的集合,怎么操作呢?fa[i]=fa[j] 即可。可如果我们要将两个集合合并呢?将集合 A 与集合 B 建边即可。这样做会导致什么结果呢?查询一个节点所属集合最坏可以达到O(n)的复杂度,所以我们增加 join 和 find 操作,join 就是将在两个集合之间建一条边,find 就是将集合间的边消除,让最终集合直接与点相连。

这就是并查集了。

带权并查集

假设存在多个集合,这些集合彼此之间又存在一些关系,

 

标签:元素,查集,fa,带权,集合,find
From: https://www.cnblogs.com/buleeyes/p/17368255.html

相关文章

  • 6795 Connected Components 并查集
     描述 编写一个程序,读取SNS(社交网络服务)中的关系,并判断给定的用户对是否可以通过网络相互访问。 输入 第一行给出了两个整数n和m。n是SNS中的用户数,m是SNS中的关系数。SNS中的用户由ID0,1,...,n-1标识。在接下来的m行中,给出了关系。每个关系由两个整......
  • 2649: More is better 并查集
    王先生想要一些男孩帮助他完成一个项目。因为项目比较复杂,男生来的越多越好。当然有一定的要求。王先生选择了一个足够容纳孩子们的房间。没有被选中的男孩必须立即离开房间。一开始房间里有10000000个男孩,编号从1到10000000。经过王先生的选择,他们中仍然在这个房间里的任何两个......
  • 7922: 江湖 并查集
    描述 江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多......
  • 并查集
    并查集将两个集合合并询问两个元素是否在一个集合当中基本原理:每个集合用一颗树来表示,树根的编号就是整个集合的编号.每个节点存储它的父节点,p[x]表示x的父节点.①如何判断树根if(p[x]==x)②如何求x的集合编号while(p[x]!=x)x=p[x]③如何合并......
  • 5760: 家庭问题 并查集
    描述 有n个人,编号为1,2,……n,另外还知道存在K个关系。一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员。当n,k和k个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)此时,6个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家......
  • C语言刷leetcode——并查集
    目录概述参考链接:刷题入门题:547.省份数量(朋友圈)684.冗余连接概述https://leetcode.cn/problems/number-of-provinces/solution/python-duo-tu-xiang-jie-bing-cha-ji-by-m-vjdr/基本概念并查集是一种数据结构并查集这三个字,一个字代表一个意思。并(Union),代表合并查(Find),......
  • 数据结构——并查集
    并查集的作用:可以在近乎O(1)的时间内完成以下两个操作1、将两个集合合并2、询问两个元素是否在一个集合中 基本原理:用“树”的形式来维护每一个集合,树根的编号就是整个集合的编号,每个结点存储它的父结点(如:p[x]表示x的父结点)问题1:如何判断树根?  A:if(p[x]==x),当前x就是......
  • 并查集の进阶用法
    普通并查集我们在处理问题的时候,可能会遇到一些需要维护每个元素所在的集合的问题,而并查集却恰好完美解决了这个问题。对于普通的并查集,他支持的操作比较少,只有合并和查询,合并是指把两个集合合并成一个,而查询是询问两个元素是否在同一集合内;对于这两种操作,我们可以用一个数组\(......
  • 并查集
    并查集并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素合并(Union):合并两个元素所属集合(合并对应的树)查询(Find):查询某个元素所属集合(查询对应的树的根节点),这可以用于判断两个元素是否属于同一集合importjava.u......
  • hdu 5441 长春区域赛网络赛 1005 Travel(并查集)
    题目链接:hdu5441题目大意:有一个n个点的无向图,给出m条边的边权,给出q次询问,每次给出一个值,求用到所有边权不大于这个值的边的情况下,能够互相到达的点对的个数(自己到自己不算)题目分析:首先我们对于边按照边权从小到大排序,对于询问按照值从小到大排序。枚举每次询问,从前到后扫描边,如果......