题目大意:维护 N 个人和 M 个关系,对每个人来说符合:我朋友的朋友也是我的朋友,我敌人的敌人也是我的朋友,求最多有多少个朋友构成的联通块。

题目大意:维护关系显然要用到并查集,这里是维护了两种关系,即:朋友和敌人,应该有两种做法,首先是维护带权并查集,可用 0 表示两人为朋友,1 表示两人为敌人,不过这样做似乎对于求有多少个朋友构成的联通块并不容易,因为只要两个人有关系(无论什么关系)都在一个联通块中;另一种做法就是扩展域并查集,将一个点拆成两个点,分别表示自己朋友的集合和自己敌人的集合,这样最后统计自己朋友的集合有多少联通块直接排序去重即可。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1010; int n,m,f[maxn<<1],a[maxn];
char opt[5]; int find(int x){
return x==f[x]?x:f[x]=find(f[x]);
} void read_and_parse(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n<<1;i++)f[i]=i;
} void solve(){
int x,y;
while(m--){
scanf("%s%d%d",&opt,&x,&y);
if(opt[0]=='F')f[find(x)]=find(y);
else f[find(x)]=find(y+n),f[find(x+n)]=find(y);
}
for(int i=1;i<=n;i++)a[i]=find(i);
sort(a+1,a+n+1);
printf("%d\n",unique(a+1,a+n+1)-a-1);
} int main(){
read_and_parse();
solve();
return 0;
}

最新文章

  1. Custom work flow
  2. SELINUX、Security Access Control Strategy &amp;&amp; Method And Technology Research - 安全访问控制策略及其方法技术研究
  3. django rest_framework--入门教程2
  4. 讽刺的是,我在linux下使用最多的命令,竟然是windows的
  5. Linux下获取公网IP地址
  6. fmri的图像数据在matlab中显示,利用imagesc工具进行显示,自带数据集-by 西南大学xulei教授
  7. SQLServer Ansi_Padding的用法
  8. 用Java实现一个通用并发对象池
  9. iOS开发app上架流程之证书的制作
  10. OpenCV 实现图片的水平投影与垂直投影,并进行行分割
  11. 关于html文档的规范
  12. IOS 选择会员资格
  13. Django 自定义过滤器和模板标签
  14. 【PyQt5-Qt Designer】简易的数字键盘输入+简易计算器
  15. poj2094
  16. jquery訪问ashx文件演示样例
  17. 《Java Concurrency》读书笔记,使用JDK并发包构建程序
  18. InsertSql
  19. CTF-练习平台-WEB之 计算题
  20. U3D安卓下OnApplicationQuit不执行的解决方法

热门文章

  1. 20155334 《网络攻防》 Exp 8 Web基础
  2. 赚钱的小生意,VC对你没兴趣
  3. vs2017 用 nuget发布包时报错
  4. SpringBoot日记——Docker的使用
  5. mount命令详解及常见问题汇总
  6. 云服务器+tomcat+mysql+web项目搭建部署
  7. 如何干净的卸载docker
  8. 选择排序的C、C++实现
  9. RDM 使用与破解
  10. [转帖] 大神 Linus Torvalds 语录