[洛谷P1892][codevs2597]团伙
2024-08-28 04:47:05
题目大意:有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;
}
最新文章
- HTML5 data-* 属性
- windows系统下ftp上传下载和一些常用命令
- cvKMeans2函数用法概述
- [开发笔记]-js判断用户的浏览设备是移动设备还是PC
- HTML 网页游戏 2048
- 谈一谈第九届移动互联网开发者大会( MDCon 2016 )
- Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
- 【BZOJ2431】逆序对数列(动态规划)
- 提示Unused default export错误,如何解决
- 词向量:part 2 CBoW、Skip-Gram、Negative Sampling、Hierarchical Softmax、GloVe、fastText、doc2vec
- Python中列表(list)、字典(dict)排序的程序
- Android自带的TTS功能
- 3. Recursive AutoEncoder(递归自动编码器)
- Amazon SES SPF和DKIM设置教程
- jquery checkbox
- Jenkins插件开发(四)-- 插件发布
- ES6系列_4之扩展运算符和rest运算符
- mysql类似递归的一种操作进行层级查询
- Python 3 字符串转MD5形式
- Python3 xml模块的增删改查
热门文章
- easyui的增删改
- Eclipse中使用GIT将文件还原至上一版本
- php字符处理
- js数组的一些骚操作 (用一行代码实现)
- POJ 3122 Pie( 二分搜索 )
- HDU 5763 Another Meaning (KMP/哈希+DP)
- [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)
- [JZOJ]100046【NOIP2017提高A组模拟7.14】收集卡片
- python_三级字典
- nignx 502错误不能使用/的路径方式 即pathinfo