当前位置:网站首页>Luogu p1892 [boi2003] Gang (and search for variant anti set)
Luogu p1892 [boi2003] Gang (and search for variant anti set)
2022-07-02 10:58:00 【Morgannr】
[BOI2003] gangs
Title Description
Now there is n n n personal , There are two relationships between them : Friends and enemies . We know :
- A person's friend's friend is a friend
- A man's enemy is his friend
Now we need to form a group of these people . Two people in a group if and only if they are friends . Ask for the maximum number of possible groups of these people .
Input format
Enter an integer in the first line n n n Number of Representatives .
On the second line, enter an integer m m m It means to list m m m A relationship .
Next m m m That's ok , One character per line o p t opt opt And two integers p , q p,q p,q, They represent the relationship ( Friends or enemies ), The first and second of the two people involved . among o p t opt opt There are two possibilities :
- If o p t opt opt by
F, It means p p p and q q q It's a friend. . - If o p t opt opt by
E, It means p p p and q q q It's the enemy .
Output format
One integer per line represents the largest number of groups .
Examples #1
The sample input #1
6
4
E 1 4
F 3 5
F 4 6
E 1 2
Sample output #1
3
Tips
about 100 % 100\% 100% The data of , 2 ≤ n ≤ 1000 2 \le n \le 1000 2≤n≤1000, 1 ≤ m ≤ 5000 1 \le m \le 5000 1≤m≤5000, 1 ≤ p , q ≤ n 1 \le p,q \le n 1≤p,q≤n.
The question :
My friend's friend is my friend , My enemy's enemy is my friend , The final output Number of gangs . Be careful , Two people in a group if and only if they are friends .
Ideas :
It is easy to think of this problem as side weighted and search set , But it's not , According to the original problem surface of this problem , In fact, there can be no relationship between two people : May have never met , Or the police department doesn't know their relationship . The translation on Luo Gu said that everyone has a relationship .
Experience that can be accumulated in this topic :
- For the relationship between two people , There can be no relationship , Record relationships that cannot be merged , Merge people who can be merged when you find them again .
- For the relationship between two people , There must be a relationship , use Weighted and search set .
For this question , We introduce a new approach : Anti set of union search set .
a Express a My friends ,a + n Express a Enemy set of
- If
aandbIt's a friend. , that takeaandbMy friends Just connect :p[Find(a)] = Find(b); - If
aandbIt's the enemy , be takeaThe enemy of sets withbMy friends Connected to a , takebThe enemy of sets withaMy friends Connected to a , namely :p[Find(a + n)] = Find(b),p[Find(b + n)] = Find(a)
Finally, count the number of gangs ,1 ~ n in ( Friends collection ) all p[i] == i The number of people is the answer . Because according to the meaning of the title , All gangs must be distributed in the concentration of friends , therefore as long as Count the number of nodes without ancestors in the friend set .
Code :
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
//#define int long long
int n, m;
const int N = 1010;
int p[N << 1];
int Find(int x)
{
if (p[x] != x) p[x] = Find(p[x]);
return p[x];
}
signed main()
{
int T = 1; //cin >> T;
while (T--)
{
cin >> n >> m;
int res = 0;
for (int i = 1; i < N<<1; ++i) p[i] = i;
for (int i = 1; i <= m; ++i)
{
char op[2]; int a, b;
cin >> op >> a >> b;
int pa = Find(a), pb = Find(b);
int pan = Find(a + n), pbn = Find(b + n);
if (*op == 'F')
{
p[pb] = pa;
}
else
{
p[pbn] = pa;
p[pan] = pb;
}
}
for (int i = 1; i <= n; ++i) if (p[i] == i) ++res;
cout << res << '\n';
}
return 0;
}
边栏推荐
- Mysql database remote access permission settings
- 【AGC】如何解决事件分析数据本地和AGC面板中显示不一致的问题?
- 转换YV12到RGB565图像转换,附YUV转RGB测试
- Dialogue Wu Gang: why do I believe in the rise of "big country brands"?
- LeetCode+ 76 - 80 暴搜专题
- Oracle 笔记
- Analysis of hot spots in AI technology industry
- Hdu1228 a + B (map mapping)
- 快应用中实现自定义抽屉组件
- 软件产品管理系统有哪些?12个最佳产品管理工具盘点
猜你喜欢

nodejs+express+mysql简单博客搭建

Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer

【AGC】如何解决事件分析数据本地和AGC面板中显示不一致的问题?

华为AppLinking中统一链接的创建和使用

二叉树专题--AcWing 1589. 构建二叉搜索树

二叉树专题--AcWing 1497. 树的遍历(利用后、中序遍历,构建二叉树)

Dialogue Wu Gang: why do I believe in the rise of "big country brands"?

shell编程01_Shell基础

Shutter - canvas custom graph

HDU1228 A + B(map映射)
随机推荐
Thanos Receiver
使用sqlcipher打开加密的sqlite方法
shell编程01_Shell基础
[TS] 1368 seconds understand typescript generic tool types!
长投学堂上面的账户安全吗?
转换YV12到RGB565图像转换,附YUV转RGB测试
UVM - usage of common TLM port
洛谷 P1892 [BOI2003]团伙(并查集变种 反集)
4. Random variables
What are the popular frameworks for swoole in 2022?
Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer
[SUCTF2018]followme
二叉树专题--洛谷 P1229 遍历问题(乘法原理 已知前、后序遍历求中序遍历个数)
HDU1234 开门人和关门人(水题)
面对不确定性,供应链的作用
MongoDB 学习整理(条件操作符,$type 操作符,limit()方法,skip() 方法 和 sort() 方法)
UVM factory mechanism
Common methods of JS array
Read H264 parameters from mediarecord recording
2022爱分析· 国央企数字化厂商全景报告