并查集
风有点大
good good study!!!
展开
-
【acwing】240. 食物链
题目 思路一 如何将不同并查集合并,对于同类(1)来说: 对于不同类(2)来说: 代码1 #include<iostream> using namespace std; const int N=50005; int p[N],d[N]; int n,m; int find(int x){//记录到根节点的距离 if(p[x]!=x){ int t=find(p[x]); d[x]+=d[p[x]]; p[x]=t;原创 2021-05-04 21:11:59 · 93 阅读 · 0 评论 -
【acwing】837. 连通块中点的数量
题目 思路 用size[]存储每个根节点的个数 代码 //一个连通块中点的个数都存在根节点中 #include<iostream> using namespace std; const int N=100005; int siz[N]; //存储连通块中的点个数 int p[N]; //存储父节点 int n,m; int find(int x){ //寻找根节点+路径优化 if(p[x]!=x){ p[x]=find(p[x]); }原创 2021-04-23 21:47:06 · 146 阅读 · 0 评论 -
【acwing】528. 奶酪
题目 思路 思路一 一句话题意:你要从最低点走到最高点,你必须从与下边界联通的洞孔开始走,而且每次只能走到和你所在奶酪相连通的奶酪. 对于两个奶酪而言,他们的距离必须小于2×r,才被认为是相通的. 空间内两点P1(x1,y1,z1)、P2(x2,y2,z2)的距离公式如下: 条件 这道题目的条件就是:连通性&两点之间距离公式. 这道题目的性质:还是上面所说的连通性.即两个奶酪必须连通,才可以转移 算法选择: 这道题目我们初步一看,发现特别的繁琐,然而实际上这道题目就是一道平面直角坐标系走迷宫问题原创 2021-04-23 10:24:44 · 109 阅读 · 0 评论 -
【acwing】836. 合并集合
题目 分析 很经典的并查集模板题 代码 #include<iostream> using namespace std; const int N=100005; int p[N];//P[N]的值存储的是N这个数的父节点 int find(int x){ //返回x的祖宗节点+路径压缩 if(x!=p[x]){ //如果x没有到根节点,那么一直往上走,并使得每个点最后都指向根节点 p[x]=find(p[x]); } return p[x]原创 2021-04-23 10:17:03 · 93 阅读 · 1 评论 -
并查集
什么是并查集 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。 并查集是一种树型的数据结构,用于处转载 2021-04-23 10:15:10 · 104 阅读 · 0 评论