并查集
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 · 224 阅读 · 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 · 283 阅读 · 0 评论