并查集

(1.概念:

处理 不相交 可合并 的集合关系的数据结构叫做并查集;

(2.详解

例题:P1551 亲戚

一道并查集的板子题

我们来详细解一下:

Q1:如何表示不同的家族

ans1:

即如何表示不同的集合;

再此采用的是选择集合的代表元素;

代表元素不同则所属集合不同;

Q2:如何将两个人归到同一个家族中

ans2:

即如何合并两个集合;

合并两个集合也就简化成了改集合变代表元素的指针的指向;


解释完这两个问题后,我们回到题目:

CODE

  1. 寻找家族族长(集合代表元素):

    int find(int x)
    {
    if(x==qin[x]) //qin数组为指针数组,
    return x;
    return qin[x] = find(qin[x]); //递归找族长,同时更新指针数组指向,后面再说
    }
  2. 合并家族(合并集合):

    void join(int c1,int c2)
    {
    int f1=find(c1),f2=find(c2);
    if(f1!=f2) //若不在一个家族
    qin[f1] = f2; //更改c1家族的代表元素即可
    }
  3. 全代码如下:

PS:

​ 还有一个问题:在寻找函数中 return qin[x] = find(qin[x]); 的作用

其实也很好理解,这是一种优化,叫做路径压缩优化;

在本题的解答树中,我们可以明显的看出,这种做法可以将每个新加入的成员的指针都指向家族的族长;

而避免了每次查询时都需重复递归,大大降低了时间复杂度;

P1551 亲戚 题解。。。的更多相关文章

  1. P1551 亲戚题解

    标准并查集板子题 没啥好说的,分明是白书上的(除了输入方式外一点都没改动) #include<cstdio> #include<iostream> using namespac ...

  2. 洛谷 P1551 亲戚

                      洛谷 P1551 亲戚 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描 ...

  3. P1551 亲戚 并查集

    P1551 亲戚 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么 ...

  4. 洛谷P1551 亲戚

    洛谷P1551 亲戚 原题 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是 ...

  5. 洛谷 P1551 亲戚(并查集模板)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1551 思路: 很显然地我们会发现,这是一道并查集的模板题,并且是考察了并查集中的”并“和”查“的操 ...

  6. [LUOGU] P1551 亲戚

    题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...

  7. P1551 亲戚 洛谷

    https://www.luogu.org/problem/show?pid=1551 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个 ...

  8. 洛谷——P1551 亲戚

    题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...

  9. 洛谷P1551 亲戚 (并查集模板题)

    链接 https://www.luogu.org/problemnew/show/P1551 代码 #include<bits/stdc++.h> using namespace std; ...

  10. P1551 亲戚

    这里是题面啊~ 这道题我就不多说了,基本(好吧没有基本)就是一道模板题,读入+并查集+输出,完美结束 #include<set> #include<map> #include& ...

随机推荐

  1. Go语言基础之并发 goroutine chan

    参考文档: https://www.liwenzhou.com/posts/Go/14_concurrence/ http://www.5lmh.com/并发编程/channel.html 示例一: ...

  2. 在Linux下想要删除一个目录需要怎样的权限

    场景一 在Home目录下创建一个目录dirtest,然后使用chmod 333 dirtest修改目录权限.这时候dirtest的权限为d-wx-wx-wx,如果执行rm -r dirtest可以进行 ...

  3. SQL如何删除所有字段都相同的重复数据?

    SQL Server数据库:有时候在处理数据时会遇到不加主键的表,导致数据表内出现了一模一样的数据,刚开始第一时间想到的方式是,把两条数据全部删除,然后再插入一条,但是这种可能数据量比较少的话,还可以 ...

  4. fastposter v2.9.2 最简海报生成器

    fastposter v2.9.2 程序员必备海报生成器 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击 ...

  5. 小程序真机报错errMsg: “hideLoading:fail:toast can‘t be found“ ?

    showLoading 和 showToast 同时只能显示一个: showLoading 应与hideLoading 配对使用: 把请求接口统一封装,开始请求接口时showLoading,请求接口后 ...

  6. Splashtop Business Access 的常见问题解答

    Splashtop Business Access 是一款优秀的远程访问软件,使个人和团队可以快速.简单.安全地访问远程计算机.Splashtop Business Access 是 LogMeIn ...

  7. 当字符遇上 scanf() 要当心

    当字符遇上 scanf() 要当心 看一下程序 char ch1,ch2; printf("请输入ch1,ch2的值:"); scanf("%c %c",&am ...

  8. 80x86汇编—指令系统

    文章目录 MOV 非法传送 XCHG XLAT 堆栈指令 push 和 pop 标志寄存器指令 重点理解CF与OF与SF实际应用中的关系 运算指令 控制转移类指令(重点) 条件转移指令 顺序是按照我们 ...

  9. 4G EPS 中的随机接入

    目录 文章目录 目录 前文列表 UE 的随机接入 基于竞争的随机接入流程 基于非竞争的随机接入流程 PRACH(物理随机接入信道) 上行 TA(时间提前量) 前文列表 <4G EPS 中的小区搜 ...

  10. IceRPC之传入响应和拦截器

    作者引言 .Net 8.0 下的新RPC 很高兴啊,我们来到了IceRPC之传入响应和拦截器->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界. 传入响应 Incoming respo ...