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

二叉树专题--AcWing 3384. 二叉树遍历(已知先序遍历 边建树 边输出中序遍历)

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

从.bag文件中读取并保存.jpg图片和.pcd点云

Jsp webshell Free from killing - The Foundation of JSP

The nanny level tutorial of flutter environment configuration makes the doctor green to the end

快应用中实现自定义抽屉组件

SUS系统可用性量表

二叉树专题--AcWing 47. 二叉树中和为某一值的路径(前序遍历)
![[TS] 1368 seconds understand typescript generic tool types!](/img/2b/58a850b52ce8a9b2e6e7b6b72b0fe5.jpg)
[TS] 1368 seconds understand typescript generic tool types!

Leetcode+ 76 - 80 storm search topic
随机推荐
Introduction to MySQL 8 DBA foundation tutorial
nodejs+express+mysql简单博客搭建
UWA report uses tips. Did you get it? (the fourth bullet)
Thanos Receiver
PCL extracts a subset from a point cloud
SUS系统可用性量表
4. Random variables
PCL 从一个点云中提取一个子集
JS settimeout() and interview questions
JSP webshell free -- the basis of JSP
Common methods of JS array
PCL之K-d树与八叉树
【AGC】如何解决事件分析数据本地和AGC面板中显示不一致的问题?
洛谷 P3398 仓鼠找 sugar(树上倍增 lca 判断树中两条路径是否相交 结论)
Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer
华为快应用中如何实现同时传递事件对象和自定义参数
13. Semaphore critical zone protection
How to get the password of cpolar?
14. Code implementation of semaphore
Kustomize使用手册