【题解】P1892 [BOI2003]团伙-C++
原题传送门
前置知识:并查集,不会的补了再来。
这道题只是在并查集的基础上多了一个操作而已。
这种操作,叫做反集(就先这么叫着)
题目里有一种关系是互为朋友,这很好理解,把互为朋友的两个点合并就可以了。
互为敌人怎么办?
用反集!
所谓反集,就是分别把x,y和它们对应的虚点连接起来。(虚点:a的虚点是a+n(点数))
因为一个人不可能和自己是敌人(至少这道题里不会),所以x永远不会和x+n连接起来,但如果x和y+n连接起来了,x和y就永远不会在一个并查集里了。
有了这个特性,最后检查的时候遍历一遍1-n,如果它是根节点就ans++,最后输出即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,fa[],x,y,sz[];
char o;
void init()
{
for(int i=;i<=;i++)
{
fa[i]=i;
sz[i]=;
}
}
int get(int x)
{
if(fa[x]==x)return x;
int r=get(fa[x]);
fa[x]=r;
return r;
}
void merge(int x,int y)
{
int r1=get(x),r2=get(y);
if(r1==r2)
{
return;
}
fa[r1]=r2;
sz[r2]+=sz[r1];
return;
}
int main()
{
cin>>n>>m;
init();
for(int i=;i<=m;i++)
{
cin>>o>>x>>y;
if(o=='F')merge(x,y);
else
{
merge(y+n,x);
merge(x+n,y);
}
}
int ans=;
for(int i=;i<=n;i++)
{
if(fa[i]==i)ans++;
}
cout<<ans<<endl;
return ;
}
【题解】P1892 [BOI2003]团伙-C++的更多相关文章
- Luogu P1892 [BOI2003]团伙
P1892 [BOI2003]团伙 题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人 ...
- 洛谷 P1892 [BOI2003]团伙(并查集)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1892 通过读题可以很清楚的发现这是一个并查集的题,并且要有两个集合: 若他们p和q是朋友,则存入第 ...
- P1892 [BOI2003]团伙 并查集
题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...
- 洛谷 P1892 [BOI2003]团伙
题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...
- 洛谷 P1892 [BOI2003]团伙(种类并查集)
传送门 解题思路 用并查集f存朋友关系,一个数组e存的是敌人关系,是一个辅助数组,所以叫做种类并查集. 当p和q是朋友时,直接合并,但是当是敌人时,需要一些操作. 当p还没有敌人时(即p的敌人是自己) ...
- Luogu P1892 P1525 团伙 关押罪犯
(怎么都是抓罪犯 怪不得写法差不多) 团伙 关押罪犯 并查集.以"敌人的敌人是朋友"的思路来处理.所以增加一个e/E数组来存储敌人. 关押罪犯还用到了贪心的思路.将冲突值从大到小排 ...
- [洛谷P1892][codevs2597]团伙
题目大意:有n个强盗,他们有这样的关系:1.朋友的朋友是朋友:2.敌人的敌人是朋友. 两个人是朋友,则他们在一个团伙中,是敌人则在不同团伙中. 现在给出一些朋友或敌人的关系,问最多有多少团伙.输入保证 ...
- [BOI2003]团伙
题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...
- 【洛谷P1892】团伙
题目大意:维护 N 个人和 M 个关系,对每个人来说符合:我朋友的朋友也是我的朋友,我敌人的敌人也是我的朋友,求最多有多少个朋友构成的联通块. 题目大意:维护关系显然要用到并查集,这里是维护了两种关系 ...
随机推荐
- 零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II
原文:零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II 本章将延续上一章的范例,步骤解析. 本章将延续上一章的范例,步骤解析 ...
- Android零基础入门第37节:初识ListView
原文:Android零基础入门第37节:初识ListView 之前我们学习的一些UI组件都比较简单,但是在实际开发中,会经常遇见列表界面设计,如通讯录.电话列表.信息列表等.那么从本节开始来详细学习列 ...
- eclipse 插件编写(三)
参考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_ ...
- Vm安装
说明:都是默认安装,并不需要繁琐设置,所以没有文字说明
- 栈内存不是只有2M吗?为什么不溢出?
#include <stdio.h> #include <wchar.h> #include <stdlib.h> #define MAX_PATH 1024 FI ...
- mysql自动安装教程说明
这里只说明了思路和方法 我们在安装程序里面可能需要安装的时候将mysql一起安装,那么我们就按照下面的顺序思路来. 首先我们安装的电脑上可能已经安装了mysql,所以我们的mysql服务就起一个名字, ...
- 在Mac OSX下使用ssh建立隧道(在Windows下建立隧道可以使用putty,其间会用到ppk文件)
在Windows下建立隧道可以使用putty,其间会用到ppk文件.在Mac OSX下,同样的功能可以用ssh命令实现.具体是: ssh -D 8088 -Nf user@ip -i myppk.ss ...
- MakerDAO 代币解释:DAI, WETH, PETH, SIN, MKR(一)
Maker DAO Token Maker DAO 系统是由多个智能合约 ( Sai Tap, Sai Tub, Vox, Medianiser, etc.), 和 ERC-20 代币组成. 他们一起 ...
- 在 Windows 中编译 Github 中的 GO 项目
1.相关软件与环境准备 1.1 GO 安装 下载地址,https://studygolang.com/dl,选择 Windows 版,本文安装到 D:\Go 1.2 LiteIDE 安装 下载地址,h ...
- 24 | 紧跟时代步伐:微服务模式下API测试要怎么做?