codevs 2597_团伙_并查集
来源:互联网 发布:c语言调用java接口 编辑:程序博客网 时间:2024/05/22 00:26
题目描述
在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足:
1、 一个人的朋友的朋友是他的朋友。
2、 一个人敌人的敌人是他的朋友。
3、 一个人和他所有的朋友在同一个团伙。
4、 一个人的所有敌人是同一个团伙。
告诉你关于这n个人的m条信息(即某两人是朋友,或者某两个人是敌人),请你计算出这个城市的人最多有多少个团伙。
思路
用x+n表示敌人的敌人,每次用这个数的不是敌人的数和敌人的敌人合并就成了朋友,最后判断一下有几个集合就可
#include <stdio.h>#include <iostream>#include <string>#include <algorithm>#define max 100000using namespace std;int f[max+1],a[max+1],o[max+1][3],fl[max+1];int find(int x){ if (f[x]==x) return x; f[x]=find(f[x]); return f[x];}int insert(int x,int y){ if (find(x)!=find(y)) { f[find(x)]=find(y); return 1; } return 0;}int cam(int x,int y){ return x<y;}int main(){ int n,m,t=0; scanf("%d%d",&n,&m); for (int i=0;i<=n*2;i++) f[i]=i; for (int i=1;i<=m;i++) { char ch; int x,y; cin>>ch>>x>>y; if (ch=='0') { insert(x,y); } else { insert(x,y+n); insert(y,x+n); } } int ans=0; for (int i=1;i<=n;i++) a[i]=find(f[i]); sort(a+1,a+n+1,cam); for (int i=1;i<=n;i++) if (a[i]!=a[i-1]) ans++; printf("%d\n",ans);}
0 0
- codevs 2597_团伙_并查集
- CodeVS 2597团伙(并查集)
- CodeVS-2597 团伙(并查集)
- Codevs 2597 团伙(并查集)
- codevs 2597 团伙(并查集)
- codevs 2597 团伙 并查集 解题报告
- codevs 团伙(并查集)
- 2597团伙{并查集}
- codevs 1638_洛谷 1111_修复公路_并查集
- 团伙-并查集
- codevs 1365_浴火银河星际跳跃_并查集
- 2597 团伙(并查集)
- 犯罪团伙(并查集)
- Codevs2597 团伙 并查集
- bzoj1370 团伙 【并查集】
- 图论_并查集
- 并查集_食物链
- 并查集_ 模板
- QMovie 使用方法gif
- bzoj1770-------(算法模板系列之gauss消元异或方程组)
- RxJava+Retrofit+OkHttp深入浅出-终极封装四(多文件下载之断点续传)
- C++拷贝构造函数、无名临时对象以及NRV优化分析
- construct-binary-tree-from-inorder-and-postorder-traversal
- codevs 2597_团伙_并查集
- java -version 显示版本和JAVA_HOME配置的不一样的原因以及解决
- MyBatis的SqlMapConfig.xml配置文件详解
- CentOS6.5网络设置
- 在ARM9(S3C2440)上实现ZigBee协议--基于CC2420芯片
- 为ant指定编译java源码的jdk版本
- 桌面小部件创建?
- Google浏览器调试前端代码
- 如何让Alarm类更像一个“闹钟”