BZOJ 1370 团伙
2024-08-30 23:35:15
两个认识的人不是朋友就是敌人,且满足:
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 ;
}
最新文章
- php-fpm进程数优化
- Android下的数据储存方式
- JVM培训作业第二周
- 复利计算- 结对2.0--复利计算WEB升级版
- linux rm 命令
- poj 2932 Coneology(扫描线+set)
- hive 分配map数过少导致任务执行慢
- Ubuntu软件中心卡在正在应用更改的解决办法
- Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)
- 使用token做认证
- int与integer的区别
- openFileDialog的使用
- Google advertiser 开发
- HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)
- 【转载】抓包工具Fidder详解(主要来抓取Android中app的请求) 包括https
- Scala语言开发入门
- GitHub 源码,Framework 框架
- Objective-C 之category
- 「日常训练」Magic Stones(CodeForces-1110E)
- 【转】es6的拓展运算符 spread ...
热门文章
- bzoj1407 [Noi2002]Savage——扩展欧几里得
- Thinkphp模板标签if和eq的区别和比较
- weiphp插件开发注意
- array_column() 函数[二维数组转为一维数组]
- spring cloud config搭建说明例子(三)-添加actuator
- ACM_01背包(恰好装满)
- Vue组件之间通信的三种方式
- P1044 栈
- phpcms标签第三弹
- android studio 的Error:No such property: packageApplicationTask for class: com.android.build.gradle.internal.variant.ApkVariantOutputData解决方法