当前位置:网站首页>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
a
andb
It's a friend. , that takea
andb
My friends Just connect :p[Find(a)] = Find(b);
- If
a
andb
It's the enemy , be takea
The enemy of sets withb
My friends Connected to a , takeb
The enemy of sets witha
My 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;
}
边栏推荐
- 华为AppLinking中统一链接的创建和使用
- 2022-06-17
- Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer
- Internet News: Tencent conference application market was officially launched; Soul went to Hong Kong to submit the listing application
- 【AGC】构建服务3-认证服务示例
- Common methods of JS array
- 二叉树专题--洛谷 P3884 [JLOI2009]二叉树问题(dfs求二叉树深度 bfs求二叉树宽度 dijkstra求最短路)
- 首份中国企业敏捷实践白皮书发布| 附完整下载
- SPSS做Shapiro-Wilk正态分析
- JS settimeout() and interview questions
猜你喜欢
随机推荐
Is this code PHP MySQL redundant?
记录 AttributeError: ‘NoneType‘ object has no attribute ‘nextcall‘
Sus system availability scale
How to get the password of cpolar?
shell编程01_Shell基础
Retrofit's callback hell is really vulnerable in kotlin synergy mode!
1287_ Implementation analysis of prvtaskistasksuspended() interface in FreeRTOS
JSP webshell free -- webshell free
12.进程同步与信号量
正则及常用公式
力扣(LeetCode)182. 查找重复的电子邮箱(2022.07.01)
618 what is the secret of dominating the list again? Nike's latest financial report gives the answer
Use of vscode tool
一招快速实现自定义快应用titlebar
PCL eigen introduction and simple use
UVM - configuration mechanism
洛谷 P3398 仓鼠找 sugar(树上倍增 lca 判断树中两条路径是否相交 结论)
1287_FreeRTOS中prvTaskIsTaskSuspended()接口实现分析
PCL之K-d树与八叉树
如何用list组件实现tabbar标题栏