团伙

luogu 1892

代码:

定义对手的对手是朋友,朋友的朋友是朋友,现在有n个人和m组关系,如果两个人是朋友那么他们属于同一个团伙,问有多少个团伙

原题:

题目描述

1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:
我朋友的朋友是我的朋友;
我敌人的敌人也是我的朋友。
两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。

输入输出格式

输入格式:

输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N)。 第二行M(1<=M<=5000),表示关于强盗的信息条数。 以下M行,每行可能是F p q或是E p q(1<=p q<=N),F表示p和q是朋友,E表示p和q是敌人。输入数据保证不会产生信息的矛盾。

输出格式:

输出文件gangs.out只有一行,表示最大可能的团伙数。

输入输出样例

输入样例#1:

6
4
E 1 4
F 3 5
F 4 6
E 1 2

输出样例#1:

3

解题思路:

记下每个人的敌人,如果遇到敌人,就和敌人的敌人合并,如果遇到朋友就直接合并

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,p,q,x1,y1,pd,ans,a[1005][1005],dad[1005];
char x;
int find(int dep){return dad[dep]==dep?dep:dad[dep]=find(dad[dep]);}//并查集
int main()
{scanf("%d %d",&n,&m);for (int i=1;i<=n;++i)dad[i]=i;for (int i=1;i<=m;++i){cin>>x;while (x!='E'&&x!='F') cin>>x;//读入scanf("%d %d",&p,&q);if (x=='F'){x1=find(p);//合并y1=find(q);dad[min(x1,y1)]=max(x1,y1);}else{for (int j=1;j<=a[p][0];++j)//敌人的敌人{if (a[p][j]==q) continue;x1=find(a[p][j]);y1=find(q);dad[min(x1,y1)]=max(x1,y1);}for (int j=1;j<=a[q][0];++j)//反过来也要{if (a[q][j]==p) continue;x1=find(a[q][j]);y1=find(p);dad[min(x1,y1)]=max(x1,y1);}a[p][++a[p][0]]=q;//记下来a[q][++a[q][0]]=p;}}for (int i=1;i<=n;++i){pd=1;for (int j=i+1;j<=n;++j)if (find(i)==find(j))//看是否在同一个团伙{pd=0;break;}if (pd) ans++;}printf("%d",ans);
}

【并查集】团伙(luogu 1892)相关推荐

  1. 并查集——团伙(洛谷 P1892)

    题目选自洛谷P1892 最基础的并查集是给出关系直接合并,这道题呢稍微多了一些条件,就是敌人的敌人也是自己的朋友,所以在合并的时候多了几步操作. 首先,要充分理解题目. "敌人的敌人就是朋友 ...

  2. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  3. 【并查集】银河英雄传说 (luogu 1196/ssl 1225)

    银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...

  4. 【并查集】家谱(luogu 2814/ssl 2343)

    家谱 luogu 2814 ssl 2343 题目大意: 给一堆父子关系,求出一些人的最大的祖先 原题: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到 ...

  5. 【bzoj1370】[Baltic2003]Gang团伙 并查集

    题目描述 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一个团伙.告诉你关于这n个人的m条信息, ...

  6. 精讲并查集经典习题:P1892 [BOI2003]团伙(超详细)

    一,需要开o2才能AC的代码 用emys[i]存储第i个人的敌人数,vector<long long>emyr[i]存储i个人的所以敌人,fa[i]存储第i个人的大boss. 1.初始化  ...

  7. 洛谷 P1892 [BOI2003]团伙(并查集变种 反集)

    [BOI2003]团伙 题目描述 现在有 n n n 个人,他们之间有两种关系:朋友和敌人.我们知道: 一个人的朋友的朋友是朋友 一个人的敌人的敌人是朋友 现在要对这些人进行组团.两个人在一个团体内当 ...

  8. 强盗团伙(啊哈-并查集[模板])

    题目 快过年了,犯罪分子们也开始为年终奖"奋斗"了,小哼的家乡出现了多次抢劫事件.由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过警察叔叔还是搜 ...

  9. P1892 [BOI2003]团伙(并查集,反集)难度⭐⭐★

    题目链接 反集 如果a和b是敌人,合并n+b和a,n+a和b 如果c和a是敌人,合并n+c和a,n+a和c 那么b和c自然就合并在一起了 这样就符合了题目敌人的敌人是朋友的规则 注意 并查集不要忘了初 ...

最新文章

  1. js回调与异步加载的用法
  2. git add多个文件_Git之旅② - 子命令与设计哲学
  3. 【干货】吴恩达deeplearning.ai专项课程历史文章汇总
  4. 马斯克认为 AI 必超越并威胁人类,他宁愿搞脑机接口也不碰AI
  5. 关系型数据库(RDBMS)实质
  6. r语言赋值为na_r语言将空白格替换成NA
  7. 37 MM配置-采购-采购订单-采购订单审批-编辑类
  8. 如何使用ssh工具便于远程管理
  9. Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测...
  10. delphi7中的指针
  11. 一次买房子血淋淋的教训
  12. 面向对象06(抽象类)
  13. 学习总结和方法经验一
  14. 【Linux开发环境搭建】之Nginx安装
  15. 中兴设备电话人工服务器,中兴刀片服务器 ATCA机柜 中兴 6008002200 网络服务器机柜...
  16. 标准生物钟作息时间表
  17. 恒源云GPU租用保姆级教程,助力深度学习训练!
  18. bootstrap表格 行编辑状态_JS组件系列——BootstrapTable 行内编辑解决方案:x-editable...
  19. [RK3399][Android7.1]修改系统配置同时输出Speaker和USB音频
  20. 汉字转换成url编码

热门文章

  1. 在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案
  2. 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!
  3. 每天一小时python官方文档学习(六)————循环和条件控制的进阶用法
  4. 紧跟月影大佬的步伐,一起来学习如何写好JS(下)
  5. 广东省计算机应用考试题,广东省计算机等级考试一级试题
  6. java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍
  7. [SpringBoot2]ajax函数中data参数的数据设置方式
  8. [JavaWeb-JavaScript]JavaScript运算符
  9. 《C++ Primer》14.2.2节练习
  10. [蓝桥杯2019初赛]数列求值-模拟+数论