草庐IT

【蓝桥杯】考前押题--并查集

🎉考前冲刺🎉🎠1、合根植物🎏2、亲戚🧵3、七段码✏️记笔记:并查集属于高级算法的一种,但是根据历年省赛真题来看,只要掌握了该模板,那几乎就是送分题哦,我将从这三道经典的并查集题目来带大家学习并查集模板!!🎠1、合根植物🎯问题描述样例输入54162315594878910101111121014121614181718151919209131317样例输出5 其合根情况参考下图:packageDay_Day_work;importjava.util.Scanner;/***@authoryx*@date2022-03-2520:18*/publicclass合根植物___并查集{staticin

【蓝桥杯】考前押题--并查集

🎉考前冲刺🎉🎠1、合根植物🎏2、亲戚🧵3、七段码✏️记笔记:并查集属于高级算法的一种,但是根据历年省赛真题来看,只要掌握了该模板,那几乎就是送分题哦,我将从这三道经典的并查集题目来带大家学习并查集模板!!🎠1、合根植物🎯问题描述样例输入54162315594878910101111121014121614181718151919209131317样例输出5 其合根情况参考下图:packageDay_Day_work;importjava.util.Scanner;/***@authoryx*@date2022-03-2520:18*/publicclass合根植物___并查集{staticin

【2022年蓝桥杯真题之带权并查集问题】推导部分和

⭐️前面的话⭐️【2022年蓝桥杯真题之带权并查集问题】推导部分和对于一个长度为NNN的整数数列A1,A2,⋯ANA_1,A_2,\cdotsA_NA1​,A2​,⋯AN​,小蓝想知道下标lll到rrr的部分和∑i=lr=Al+Al+1+⋯+Ar\sum_{i=l}^r=A_l+A_{l+1}+\cdots+A_r∑i=lr​=Al​+Al+1​+⋯+Ar​是多少?然而,小蓝并不知道数列中每个数的值是多少,他只知道它的MMM个部分和的值。其中第iii个部分和是下标lil_ili​到rir_iri​的部分和∑j=liri=\sum_{j=l_i}^{r_i}=∑j=li​ri​​=Ali+Ali

【2022年蓝桥杯真题之带权并查集问题】推导部分和

⭐️前面的话⭐️【2022年蓝桥杯真题之带权并查集问题】推导部分和对于一个长度为NNN的整数数列A1,A2,⋯ANA_1,A_2,\cdotsA_NA1​,A2​,⋯AN​,小蓝想知道下标lll到rrr的部分和∑i=lr=Al+Al+1+⋯+Ar\sum_{i=l}^r=A_l+A_{l+1}+\cdots+A_r∑i=lr​=Al​+Al+1​+⋯+Ar​是多少?然而,小蓝并不知道数列中每个数的值是多少,他只知道它的MMM个部分和的值。其中第iii个部分和是下标lil_ili​到rir_iri​的部分和∑j=liri=\sum_{j=l_i}^{r_i}=∑j=li​ri​​=Ali+Ali

【蓝桥集训】第七天——并查集

作者:指针不指南吗专栏:Acwing蓝桥集训每日一题🐾或许会很慢,但是不可以停下来🐾文章目录1.亲戚2.合并集合3.连通块中点的数量有关并查集的知识学习可以移步至——【算法】——并查集1.亲戚或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚,等等。从这些信息中,你可以推出Mar

【蓝桥集训】第七天——并查集

作者:指针不指南吗专栏:Acwing蓝桥集训每日一题🐾或许会很慢,但是不可以停下来🐾文章目录1.亲戚2.合并集合3.连通块中点的数量有关并查集的知识学习可以移步至——【算法】——并查集1.亲戚或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚,等等。从这些信息中,你可以推出Mar

并查集路径压缩

并查集路径压缩并查集里的find函数里可以进行路径压缩,是为了更快速的查找一个点的根节点。对于一个集合树来说,它的根节点下面可以依附着许多的节点,因此,我们可以尝试在find的过程中,从底向上,如果此时访问的节点不是根节点的话,那么我们可以把这个节点尽量的往上挪一挪,减少数的层数,这个过程就叫做路径压缩。如下图中,find(4)的过程就可以路径压缩,让数的层数更少。节点4往上寻找根节点时,压缩第一步,树的层数就减少了一层:节点2向上寻找,也不是根节点,那么把元素2指向原来父节点的父节点,操后后树的层数相应减少了一层,同时返回根节点0。find过程代码修改为://查找过程,查找元素p所对应的集合

并查集路径压缩

并查集路径压缩并查集里的find函数里可以进行路径压缩,是为了更快速的查找一个点的根节点。对于一个集合树来说,它的根节点下面可以依附着许多的节点,因此,我们可以尝试在find的过程中,从底向上,如果此时访问的节点不是根节点的话,那么我们可以把这个节点尽量的往上挪一挪,减少数的层数,这个过程就叫做路径压缩。如下图中,find(4)的过程就可以路径压缩,让数的层数更少。节点4往上寻找根节点时,压缩第一步,树的层数就减少了一层:节点2向上寻找,也不是根节点,那么把元素2指向原来父节点的父节点,操后后树的层数相应减少了一层,同时返回根节点0。find过程代码修改为://查找过程,查找元素p所对应的集合

并查集 rank 的优化

并查集rank的优化上一小节介绍了并查集基于size的优化,但是某些场景下,也会存在某些问题,如下图所示,操作union(4,2)。根据上一小节,size的优化,元素少的集合根节点指向元素多的根节点。操完后,层数变为4,比之前增多了一层,如下图所示:由此可知,依靠集合的size判断指向并不是完全正确的,更准确的是,根据两个集合层数,具体判断根节点的指向,层数少的集合根节点指向层数多的集合根节点,如下图所示,这就是基于rank的优化。我们在并查集的属性中,添加rank数组,rank[i]表示以i为根的集合所表示的树的层数。...privateint[]rank; //rank[i]表示以i为根的

并查集 rank 的优化

并查集rank的优化上一小节介绍了并查集基于size的优化,但是某些场景下,也会存在某些问题,如下图所示,操作union(4,2)。根据上一小节,size的优化,元素少的集合根节点指向元素多的根节点。操完后,层数变为4,比之前增多了一层,如下图所示:由此可知,依靠集合的size判断指向并不是完全正确的,更准确的是,根据两个集合层数,具体判断根节点的指向,层数少的集合根节点指向层数多的集合根节点,如下图所示,这就是基于rank的优化。我们在并查集的属性中,添加rank数组,rank[i]表示以i为根的集合所表示的树的层数。...privateint[]rank; //rank[i]表示以i为根的