洛谷 P1892 [BOI2003]团伙(种类并查集)
2024-09-05 12:31:59
传送门
解题思路
用并查集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 ;
}
最新文章
- ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
- BZOJ 1051: [HAOI2006]受欢迎的牛
- ajax json 动态传值
- 2015年最热门前端框架React 入门实例教程
- JavaScript基础13——js的string对象
- Remoting和Webservice的区别
- spring boot实战(第十二篇)整合RabbitMQ
- 【SPOJ】1825. Free tour II(点分治)
- php连接oracle10数据库 转载
- CenterOS中安装Redis及开机启动设置
- 玩转createjs
- iOS 面试题集合
- shell 命名管道,进程间通信
- NOIP2010题解
- 【Android 应用开发】BluetoothSocket详解
- tnsping 不通
- SyntaxError: EOL while scanning string literal
- Android中AsyncTask的使用
- Python实现机器学习算法:EM算法
- [CQOI 2018]社交网络
热门文章
- C#Stopwatch的简单计时 [收藏]
- popen, pclose - process I/O
- Airbnb JavaScript 编码风格指南(2018年最新版)
- glob &; fnmatch -- 使用Unix style通配符
- Oracle Internals Notes Redo Write Triggers
- 【leetcode】1048. Longest String Chain
- 【leetcode】1026. Maximum Difference Between Node and Ancestor
- git本地创建一个分支并上传到远程服务器上
- 吐血整理 | 1000行MySQL学习笔记,不怕你不会,就怕你不学!
- php strtr()函数 语法