传送门

解题思路

用并查集f存朋友关系,一个数组e存的是敌人关系,是一个辅助数组,所以叫做种类并查集。

当p和q是朋友时,直接合并,但是当是敌人时,需要一些操作。

当p还没有敌人时(即p的敌人是自己),直接e[p]=q;

否则就把p的敌人和q变成朋友,这也就是变相把p和q变成敌人。

当然,对q也是如此。

最后统计有多少人是祖先,也就是说自己的朋友是自己,统计下来。

AC代码

 #include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int f[maxn],e[maxn];
int n,m;
char c;
int find(int x){
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
int ans;
int main(){
cin>>n>>m;
for(int i=;i<=n;i++) f[i]=i,e[i]=i;
for(int i=;i<=m;i++){
int p,q;
cin>>c>>p>>q;
if(c=='F'){
f[find(p)]=find(q);
}
else{
if(e[p]==p)e[p]=find(q);
else f[find(e[p])]=find(q);
if(e[q]==q)e[q]=find(p);
else f[find(e[q])]=find(p);
}
}
for(int i=;i<=n;i++){
if(f[i]==i) ans++;
}
cout<<ans;
return ;
}

最新文章

  1. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
  2. BZOJ 1051: [HAOI2006]受欢迎的牛
  3. ajax json 动态传值
  4. 2015年最热门前端框架React 入门实例教程
  5. JavaScript基础13——js的string对象
  6. Remoting和Webservice的区别
  7. spring boot实战(第十二篇)整合RabbitMQ
  8. 【SPOJ】1825. Free tour II(点分治)
  9. php连接oracle10数据库 转载
  10. CenterOS中安装Redis及开机启动设置
  11. 玩转createjs
  12. iOS 面试题集合
  13. shell 命名管道,进程间通信
  14. NOIP2010题解
  15. 【Android 应用开发】BluetoothSocket详解
  16. tnsping 不通
  17. SyntaxError: EOL while scanning string literal
  18. Android中AsyncTask的使用
  19. Python实现机器学习算法:EM算法
  20. [CQOI 2018]社交网络

热门文章

  1. C#Stopwatch的简单计时 [收藏]
  2. popen, pclose - process I/O
  3. Airbnb JavaScript 编码风格指南(2018年最新版)
  4. glob &amp; fnmatch -- 使用Unix style通配符
  5. Oracle Internals Notes Redo Write Triggers
  6. 【leetcode】1048. Longest String Chain
  7. 【leetcode】1026. Maximum Difference Between Node and Ancestor
  8. git本地创建一个分支并上传到远程服务器上
  9. 吐血整理 | 1000行MySQL学习笔记,不怕你不会,就怕你不学!
  10. php strtr()函数 语法