题目大意:有n个强盗,他们有这样的关系:1.朋友的朋友是朋友;2.敌人的敌人是朋友。

两个人是朋友,则他们在一个团伙中,是敌人则在不同团伙中。

现在给出一些朋友或敌人的关系,问最多有多少团伙。输入保证无误。

解题思路:并查集。

如果a与b是朋友,则连接a和b。

如果a和b是敌人,则连接a和b+n,b和a+n。

那么当a和b是敌人,b和c是敌人时,a连接了b+n,c也连接了b+n,此时a和c在同一并查集当中,也就满足了“敌人的敌人是朋友”的条件。

最后扫一遍即可。

时间复杂度$O(n+m)$。

C++ Code:

#include<cstdio>
#include<cstring>
int n,q,fa[2005];
char op[5];
bool vis[2005];
int dad(int x){return fa[x]==x?x:fa[x]=dad(fa[x]);}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;++i)fa[i]=i,fa[i+n]=i+n;
while(q--){
scanf("%s",op);
if(op[0]=='F'){
int x,y;
scanf("%d%d",&x,&y);
x=dad(x),y=dad(y);
if(x!=y)fa[y]=x;
}else{
int x,y;
scanf("%d%d",&x,&y);
int a=dad(x),b=dad(y+n);
if(a!=b)fa[b]=a;
a=dad(x+n),b=dad(y);
if(a!=b)fa[a]=b;
}
}
memset(vis,0,sizeof vis);
int ans=0;
for(int i=1;i<=n;++i){
int a=dad(i);
if(!vis[a]){
++ans;
vis[a]=true;
}
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. HTML5 data-* 属性
  2. windows系统下ftp上传下载和一些常用命令
  3. cvKMeans2函数用法概述
  4. [开发笔记]-js判断用户的浏览设备是移动设备还是PC
  5. HTML 网页游戏 2048
  6. 谈一谈第九届移动互联网开发者大会( MDCon 2016 )
  7. Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
  8. 【BZOJ2431】逆序对数列(动态规划)
  9. 提示Unused default export错误,如何解决
  10. 词向量:part 2 CBoW、Skip-Gram、Negative Sampling、Hierarchical Softmax、GloVe、fastText、doc2vec
  11. Python中列表(list)、字典(dict)排序的程序
  12. Android自带的TTS功能
  13. 3. Recursive AutoEncoder(递归自动编码器)
  14. Amazon SES SPF和DKIM设置教程
  15. jquery checkbox
  16. Jenkins插件开发(四)-- 插件发布
  17. ES6系列_4之扩展运算符和rest运算符
  18. mysql类似递归的一种操作进行层级查询
  19. Python 3 字符串转MD5形式
  20. Python3 xml模块的增删改查

热门文章

  1. easyui的增删改
  2. Eclipse中使用GIT将文件还原至上一版本
  3. php字符处理
  4. js数组的一些骚操作 (用一行代码实现)
  5. POJ 3122 Pie( 二分搜索 )
  6. HDU 5763 Another Meaning (KMP/哈希+DP)
  7. [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)
  8. [JZOJ]100046【NOIP2017提高A组模拟7.14】收集卡片
  9. python_三级字典
  10. nignx 502错误不能使用/的路径方式 即pathinfo