当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

洛谷 P5536 【XR-3】核心城市(贪心 + 树形 dp 寻找树的中心)

Operator-1 first acquaintance with operator

实验电镜距离测量之Matlab处理

618 what is the secret of dominating the list again? Nike's latest financial report gives the answer

最详细MySql安装教程

Is this code PHP MySQL redundant?

2022爱分析· 国央企数字化厂商全景报告

二叉树专题--AcWing 19. 二叉树的下一个节点(找树中节点的后继)

【AI应用】海康威视iVMS-4200软件安装

13. Semaphore critical zone protection
随机推荐
Win11 arm系统配置.net core环境变量
首份中国企业敏捷实践白皮书发布| 附完整下载
Retrofit's callback hell is really vulnerable in kotlin synergy mode!
"Talking about podcasts" vol.352 the age of children: breaking the inner scroll, what can we do before high school?
JVM之垃圾回收器
SPSS做Shapiro-Wilk正态分析
二叉树专题--AcWing 19. 二叉树的下一个节点(找树中节点的后继)
2. Hacking lab script off [detailed writeup]
P1055 [noip2008 popularization group] ISBN number
从MediaRecord录像中读取H264参数
华为快应用中如何实现同时传递事件对象和自定义参数
1287_ Implementation analysis of prvtaskistasksuspended() interface in FreeRTOS
【AGC】构建服务3-认证服务示例
二叉树专题--洛谷 P1229 遍历问题(乘法原理 已知前、后序遍历求中序遍历个数)
洛谷 P1892 [BOI2003]团伙(并查集变种 反集)
K-d tree and octree of PCL
12. Process synchronization and semaphore
UVM learning - build a simple UVM verification platform
AppGallery Connect场景化开发实战—图片存储分享
PCL之滤波