两个认识的人不是朋友就是敌人,且满足:

1,朋友的朋友是朋友;

2,敌人的敌人是朋友。

一群朋友组成一个团伙,给出m个信息,求有多少个团伙。

用并查集,把一个点x拆成x和x’

若a与b为朋友,则将a与b所在集合合并,这样就满足朋友的朋友是朋友;

若a与b为敌人,则将a’与b所在集合合并,将a与b’所在集合合并;这样如果a与b,b与c为敌人,那么a与b’合并,b'与c合并,则a与c在同个集合,满足敌人的敌人是朋友。

最后,统计点1~n所属于的集合的个数即为答案。

 #include<cstdio>
#include<algorithm>
using namespace std;
int fa[],a[],p,x,y,n,m,ans=;
void read(int &k){
k=; int f=; char c=getchar();
while (c<''||c>'')c=='-'&&(f=-),c=getchar();
while (''<=c&&c<='')k=k*+c-'',c=getchar();
k*=f;
}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main(){
read(n); read(m);
for (int i=;i<=*n;i++) fa[i]=i;
for (int i=;i<=m;i++){
char c=getchar();
read(x); read(y);
if (c=='F') fa[find(x)]=find(y);
else{
fa[find(x)]=find(y+n);
fa[find(y)]=find(x+n);
}
}
for (int i=;i<=n;i++) a[i]=find(i);
sort(a+,a+n+);
for (int i=;i<=n;i++) if (a[i]!=a[i-]) ans++;
printf("%d\n",ans);
return ;
}

最新文章

  1. php-fpm进程数优化
  2. Android下的数据储存方式
  3. JVM培训作业第二周
  4. 复利计算- 结对2.0--复利计算WEB升级版
  5. linux rm 命令
  6. poj 2932 Coneology(扫描线+set)
  7. hive 分配map数过少导致任务执行慢
  8. Ubuntu软件中心卡在正在应用更改的解决办法
  9. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)
  10. 使用token做认证
  11. int与integer的区别
  12. openFileDialog的使用
  13. Google advertiser 开发
  14. HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)
  15. 【转载】抓包工具Fidder详解(主要来抓取Android中app的请求) 包括https
  16. Scala语言开发入门
  17. GitHub 源码,Framework 框架
  18. Objective-C 之category
  19. 「日常训练」Magic Stones(CodeForces-1110E)
  20. 【转】es6的拓展运算符 spread ...

热门文章

  1. bzoj1407 [Noi2002]Savage——扩展欧几里得
  2. Thinkphp模板标签if和eq的区别和比较
  3. weiphp插件开发注意
  4. array_column() 函数[二维数组转为一维数组]
  5. spring cloud config搭建说明例子(三)-添加actuator
  6. ACM_01背包(恰好装满)
  7. Vue组件之间通信的三种方式
  8. P1044 栈
  9. phpcms标签第三弹
  10. android studio 的Error:No such property: packageApplicationTask for class: com.android.build.gradle.internal.variant.ApkVariantOutputData解决方法