caioj1092: 并查集(模版 家族)
来源:互联网 发布:稀疏编码算法 详解 编辑:程序博客网 时间:2024/05/22 12:29
1092: 并查集(模版 家族)
时间限制: 1 Sec 内存限制: 128 MB
题目描述
【题意】
n个人,m条关系(x,y),表示x和y是同一家族的。
求最多可能有多少个家族。
(n<=100000,m<=1000000)
【输入格式】
第一行两个整数n和m(n<=100000,m<=1000000)
下来m行,每行两个整数x、y(1<=x,y<=n),表示一条关系.
【输出格式】
输出一个整数,表示最多可能有多少个家族。
【样例输入】
5 3
1 2
2 4
3 4
【样例输出】
2
并查集的一个模板题
关键是zuxian那一段函数
如果为了好理解可以去掉//
改为:
int zuxian(int x){ int zx; if (fa[x]!=x) zx=zuxian(fa[x]); else zx=x; fa[x]=zx;//路径压缩 return zx;}
若不加fa[x]=zx可能会超时,重复做了大量的工作,在结束时只需加一个小小的操作领x的父亲直接为zx,要直接认爸爸!才方便!
#include<iostream>#include<cstdio>using namespace std;int fa[110000];int zuxian(int x){// int zx; if (fa[x]!=x) fa[x]=zuxian(fa[x]); //else zx=x; //fa[x]=zx;//路径压缩 return fa[x];}int main(){ int n,m,x,y; scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) fa[i]=i; for (int i=1;i<=m;i++){ scanf("%d%d",&x,&y); int fx=zuxian(x); int fy=zuxian(y); if (fx!=fy){ fa[fx]=fy; } } int ans=0; for (int i=1;i<=n;i++) if(fa[i]==i) ans++; printf("%d\n",ans); return 0; }
(CSDN每天只能发10篇。。。)
阅读全文
0 0
- caioj1092: 并查集(模版 家族)
- 1092: 并查集(模版 家族)
- caioj1092 并查集模板
- vijos1034 家族(并查集模版)
- 家族(并查集)
- 【并查集】家族
- 【并查集】家族
- 家族 并查集
- [并查集]家族
- P1034 家族 (并查集 I)
- (并查集入门)P1034家族
- CodeVS 1073家族(并查集)
- 【vijos P1034】家族(并查集)
- SSL1896家族(并查集)
- 1073 家族(并查集模板)
- 【Vijos 1034】家族(并查集)
- bzoj3454 家族(并查集)
- 家族 SSL_1896 (并查集)
- python学习(三)
- (2)初识看板
- 装饰者模式
- python构造方法
- 读《SeqSLAM: Visual Route-Based Navigation for Sunny Summer Days and Stormy Winter Nights》
- caioj1092: 并查集(模版 家族)
- hdu-1372 Knight Moves
- 2017山东省赛A题(SDUT3893威佐夫博弈+尼姆博奕)
- nginx日志格式配置
- 仿今日头条的频道管理
- CentOS 上 Jenkins 安装
- GIT 学习笔记
- 程序的编译和链接过程
- Bounding box Regression详解