题目链接 https://www.lanqiao.cn/problems/1136/learning/

题目描述

小明是蓝桥王国的侦探。

这天,他接收到一个任务,任务的名字叫分辨是非,具体如下:

蓝桥皇宫的国宝被人偷了,犯罪嫌疑人锁定在 N 个大臣之中,他们的编号分别为 1\sim N1∼N。

在案发时这 N 个大臣要么在大厅1,要么在大厅2,但具体在哪个大厅他们也不记得了。

审讯完他们之后,小明把他们的提供的信息按顺序记了下来,一共 M 条,形式如下:

  • x y,表示大臣 x 提供的信息,信息内容为:案发时他和大臣 y 不在一个大厅。

小明喜欢按顺序读信息,他会根据信息内容尽可能对案发时大臣的位置进行编排。

他推理得出第一个与先前信息产生矛盾的信息提出者就是偷窃者,但推理的过程已经耗费了他全部的脑力,他筋疲力尽的睡了过去。作为他的侦探助手,请你帮助他找出偷窃者!

输入描述

第 1 行包含两个正整数 N,M,分别表示大臣的数量和口供的数量。

之后的第 2 \sim M+12∼M+1 行每行输入两个整数 x , y表示口供的信息。

1\leq N,M \leq 5\times10^51≤N,M≤5×105,1 \leq x,y\leq N1≤x,y≤N。

输出描述

输出仅一行,包含一个正整数,表示偷窃者的编号。

输入输出样例

示例 1

输入

4 5
1 2
1 3
2 3
3 4
1 4

输出

2

题解代码

普通的并查集维护的关系是: 朋友的朋友是朋友,即如果 A ~ B 是一对朋友, B ~ C 是一对朋友, 那么 A~C 是一对朋友。但如果我们需要维护这样一个关系“朋友的朋友是朋友,朋友的敌人是敌人,敌人的敌 人是朋友”,普通的并查集就无能为力了。这题也是如此,普通的并查集只能维护多少人是在一个大厅, 但是题目给的是不在一个大厅,并且只有俩个大厅,那么就要维护和同一个人不在一个大厅的俩人在一 个大厅,就不太行了,因此,需要引入种类并查集。 种类并查集又叫做扩展域并查集,也就是我们扩展出一个域 i+n,作为 i号的 点的敌人,那么同时和i+n 相连的点就是 i号点的敌人,那么他们之间也就是朋友,这样就可以维护 ”敌人的敌人是朋友“这 类关系了。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N= 5e5+10;
int n,M,res,fa[N<<1];  //N<<1==N*2int find(int i){ //查找根结点 if(i==fa[i]) return i;return fa[i]=find(fa[i]);  //压缩路径
}void Union(int x,int y){int x_root=find(x);int y_root=find(y);if(x_root!=y_root) fa[x_root]=y_root;  //x的根结点指向y的根结点} int main()
{cin>>n>>M;for(int i=1;i<=n*2;i++) fa[i]=i; //初始化for(int i=1;i<=M;i++){int x,y;cin>>x>>y;if(res) continue; //据题意,第一个与先前信息相矛盾的就是偷窃者 else{if(find(x)==find(y)||find(x+n)==find(y+n))res=x;Union(x,y+n);Union(x+n,y);} }cout<<res<<endl;return 0;
}

蓝桥 《蓝桥侦探》种类并查集相关推荐

  1. 蓝桥侦探[蓝桥杯]——种类并查集

    ⭐️引言⭐️ 针对蓝桥侦探这道题,博主用了检查环的方法和种类并查集来解.其中检查环是会超时的,因为数据集比较大,所以最优法还是种类并查集,下面依次介绍. ⭐️目录⭐️ ⚡️题述 ⚡️解法1--判断环: ...

  2. 种类并查集(蓝桥侦探)

    蓝桥侦探(种类并查集): 提示:并查集请看这篇博客,讲的十分完美!-->[算法与数据结构]-- 并查集 记录一道种类并查集的题目, 原题链接:戳我 题目描述: 小明是蓝桥王国的侦探. 这天,他接 ...

  3. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  4. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  5. poj 1703(种类并查集)

    题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...

  6. Find them, Catch them POJ - 1703(种类并查集)

    题意: 在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 1.输入D x y代表x于y不在一个团伙里 2.输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙 ...

  7. 2016陕西省ACM 热身体B 种类并查集

    Energy 发布时间: 2017年3月27日 11:31   最后更新: 2017年3月27日 18:30   时间限制: 1000ms   内存限制: 256M 描述 人类准备发射载人飞船前往火星 ...

  8. Mahmoud and a Dictionary CodeForces - 766D 种类并查集

    题意 给出多个字符串 然后再输入多个字符串之间的关系 让我们判断这其中是否存在矛盾的关系 有矛盾输出NO 没矛盾输出 YES 然后再输入多个询问 每个询问 两个字符串 让我们判断其中的关系 同义词输出 ...

  9. POJ 1703 Find them, Catch them 种类并查集

    题意 给出一堆点和关系 D为两点不同集合 A为查询两点是否不同集合 n<=1e5 code #include<cstdio> #include<iostream> #in ...

最新文章

  1. 【NLPer必看】NLP领域高质量综述论文
  2. Rust程序员一觉醒来都懵了:审核团队集体辞职,发生甚么事了?
  3. IPv6套接字编程介绍
  4. 道理我都懂,但你到底为什么偏偏喜欢咬我??
  5. php csv to array (csv 转数组)
  6. linux之mktemp命令
  7. PCL中将回调函数封装到类中
  8. 前端获取checkbox复选框的值 通过数组形式传递
  9. 第一本书应考虑哪些细节?
  10. b站pink老师JavaScript的DOM案例代码——模拟京东快递单号查询
  11. copyonwritearraylist 深究
  12. 记一次大量499http状态码问题出现与处理
  13. 磁盘压缩卷只能压缩一半
  14. Canvas--画直线
  15. GNS3 完全使用手册
  16. KSO-Linux下Centos7.5防火墙开放某个端口号权限
  17. 如何使用装饰设计模式读取指定路径下的纯文本文件的实现代码
  18. 2022编程语言排名, 后端开发语言选型
  19. 什么是 socket?
  20. 【latex】LaTeX调整图片大小的方法;自动调整合适的大小

热门文章

  1. Raspberry Pi智能设备开发-人脸识别门禁系统设计与实现
  2. 在家怎么赚钱?五个在家就能做的项目,做好了都能赚钱!
  3. css经典布局系列三——三列布局(圣杯布局、双飞翼布局)
  4. java学习笔记 java编程思想 第4章 控制执行流程
  5. 音频专用linux系统,使用录音机在Linux中轻松录制系统音频 | MOS86
  6. 希赛教师资格【考点突击营】教育的基本功能
  7. Spring Security CAS认证
  8. 工业相机、镜头、选型计算方式
  9. Fiddler-Windows系统本地抓包
  10. 0407fitness静态拉伸