![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
Freeman Z
都柏林理工大学博士录取
巴黎高等电子学院工程师录取
李莫瑞克大学硕士在读(主持爱尔兰软件研究中心)
重庆2022优秀毕业生
展开
-
[AcWing]837. 连通块中点的数量
算法标签 并查集题目简叙思路合并集合的变体一、初始化for(int i=0;i<n;i++)p[i]=i,cnt[i]=1;p[i]=i表示这是一个树根,一个祖节点cnt[i]=1表示是这个集合初始化只有它一个元素二、找根节点int find(int x){ if(p[x]!=x)p[x]=find(p[x]); return p[x];}三、合并连通块 if(op=="C"){ cin>>a>>b;原创 2020-07-27 18:10:05 · 223 阅读 · 0 评论 -
[Acwing]836. 合并集合
算法标签 并查集题目简叙思路并查集:1.将两个集合合并2.查询两个元素是否在同一个元素当中基本原理:每个集合用一颗树来表示,树根的编号就是当前集合的编号。每个节点存储它的父节点,p[x]表示x的父节点问题1;:如何判断树根:if(p[x]==x)这里非常重要的是:我们从一开始把所有p[x]=x了,这样一来,就可以用p[x]==x来判断是否是一个树的根节点问题2:如何求X的集合编号:while(p[x]!=x)x=p[x];如果不是根节点,就一直指向下一个,直到指向根节点为止问题3:如原创 2020-07-27 15:06:57 · 281 阅读 · 0 评论