2597 团伙

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold

题目描述 Description

1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:

我朋友的朋友是我的朋友;

我敌人的敌人也是我的朋友。

两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。

输入描述 Input Description

输入文件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是敌人。输入数据保证不会产生信息的矛盾。

输出描述 Output Description

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

样例输入 Sample Input

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

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

2<=N<=1000

1<=M<=5000

1<=p q<=N

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 #define N 1010
 6 int far[N];
 7 int n,m;
 8 int a,b;
 9 char q;
10 int enemy[N][N];  //记录下敌人
11 int vis[N];
12 int ans;
13 int Find_(int a)  //查找最顶端的元素
14 {
15     if(far[a]!=a)far[a]=Find_(far[a]);
16     return far[a];
17 }
18 void In_()  //输入
19 {
20     scanf("%d%d",&n,&m);
21     for(int i=1;i<=n;++i)  //初始化
22         far[i]=i;
23     for(int i=1;i<=m;++i)
24     {
25         cin>>q;
26         scanf("%d%d",&a,&b);
27         if(q=='F')
28         {
29             int r=Find_(a);
30             int rr=Find_(b);
31             if(r!=rr)far[rr]=r;  //进行合并
32         }
33         else {
34             enemy[a][++enemy[a][0]]=b;  //记下敌人
35             enemy[b][++enemy[b][0]]=a;
36         }
37     }
38 }
39 void Work_()
40 {
41     for(int j=1;j<=n;++j)  //遍历所有人的敌人 将敌人人的敌人变成朋友
42     {
43         for(int i=1;i<enemy[j][0];++i)
44         {
45             int r=Find_(enemy[j][i]);
46             int rr=Find_(enemy[j][i+1]);
47             if(r!=rr)far[rr]=r;
48             else continue;
49         }
50     }
51     memset(vis,0,sizeof(vis));
52     for(int i=1;i<=n;++i)
53     {
54         vis[Find_(i)]=1;
55     }
56     for(int i=1;i<=n;++i)
57     {
58         if(vis[i])ans++; //记下多少个团伙
59     }
60 }
61 void Out_()  //输出
62 {
63     cout<<ans;
64 }
65 int main()
66 {
67     In_();
68     Work_();
69     Out_();
70     return 0;
71 }

转载于:https://www.cnblogs.com/mjtcn/p/6701116.html

2597 团伙(并查集就是好用!)相关推荐

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

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

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

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

  3. [codevs2597]团伙并查集

    题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友 ...

  4. 团伙 并查集_BZOJ 1370 Baltic2003 Gang团伙 并查集

    题目大意:给定n个人,朋友的朋友是朋友,敌人的敌人是朋友,朋友之间组成一个团伙,求团伙数 将每个点x拆成两个:x和x+n 如果x和y是朋友,就将x和y合并 如果x和y是敌人,就将x和y+n合并,将y和 ...

  5. 【洛谷1892】团伙 并查集

    题意 题面说的很清楚 同noip2010关押罪犯 传送门:http://blog.csdn.net/dadatu_zhao/article/details/78806584 #include<i ...

  6. 漫画:什么是 “并查集” ?

    作者 | 封承成 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 导语:并查集是一种精巧的算法,本身并不难理解,却很常用,在许多场景下都能找到并查集的身影. 本文作者封承成,年仅1 ...

  7. 什么是 “并查集” ?

    导语:并查集是一种精巧的算法,本身并不难理解,却很常用,在许多场景下都能找到并查集的身影. 本文作者封承成,年仅12岁,非常感谢他的投稿. 并查集是什么 并查集,是一种判断"远房亲戚&quo ...

  8. 【并查集】团伙(luogu 1892)

    团伙 luogu 1892 代码: 定义对手的对手是朋友,朋友的朋友是朋友,现在有n个人和m组关系,如果两个人是朋友那么他们属于同一个团伙,问有多少个团伙 原题: 题目描述 1920年的芝加哥,出现了 ...

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

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

最新文章

  1. 到底选择PostgreSOL还是MySQL?看这里!
  2. 解决fitz模块报错
  3. AtCoder AGC038D Unique Path (图论)
  4. DataSet 的 Merge 方法
  5. matplotlib实践过程总结
  6. Docker入门-安装
  7. 试翻译Output Cache Improvements in Orchard 1.9
  8. http://selectorgadget.com/
  9. DNN Mail功能介绍 [DNN 3.2.2]
  10. java学习之类型转换与越界
  11. 家庭网络,怎么给每个房间装一个无线路由器?
  12. 冒泡排序C语言代码 时间复杂度
  13. 中职计算机课应用的内容,信息技术手段在中职学校计算机课程教学中的应用
  14. java键盘钩子_jna test【鼠标 键盘钩子】
  15. C#实现封装SPC过程能力工具类ProcessCababilityHelper
  16. PPT的一键操作 原来这么神奇
  17. python搭建轻服务,实现上传下载文件
  18. JavaScript 内置对象
  19. 在线正则表达式测试工具
  20. oculus 登录 错误代码 ovr40779122

热门文章

  1. linux7系统怎么启动ftp,CentOS 7上启动 vsftp报错解决一例
  2. c c python的区别_python和c语言的主要区别总结
  3. Android加上base的作用,android-notifyDataSetChanged在BaseAdapter上不起作用
  4. 搜索引擎下拉食云速捷详细_详细解析关键词与搜索引擎之间的霸屏关系
  5. Linux学习笔记---使用MfgTool工具烧写官方系统(一)
  6. window10本地解析域名
  7. 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图
  8. 排序算法lowb三人组-插入排序
  9. Spring Cloud 架构 五大神兽的功能
  10. Huge page使用的一些问题