poj 2524 求连通分量(并查集模板题)
2015-06-24 22:54
393 查看
求连通分量
Sample Input
10 9
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
10 4
2 3
4 5
4 8
5 8
0 0
Sample Output
Case 1: 1
Case 2: 7
# include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <cmath> # include <queue> # define LL long long using namespace std ; const int MAXN = 50010; int F[MAXN]; int num[MAXN] ; int find(int x)//找x的祖先结点 { if(F[x]==x) return x; return F[x]=find(F[x]); } void bing(int u,int v) //按秩合并 { int x = find(u); int y = find(v); if(x == y) return ; if(num[x] >= num[y]) { F[y] = x; num[x] += num[y]; } else { F[x] = y; num[y] += num[x]; } } int main() { //freopen("in.txt","r",stdin) ; int n , m ; int Case = 0 ; while(scanf("%d %d", &n , &m) != EOF) { Case++ ; if (n == 0 && m == 0) break ; int i ; for(i = 1 ; i <= n ; i++) { F[i] = i ; num[i] = 1 ; } int u , v ; while(m--) { scanf("%d %d" , &u , &v) ; bing(u , v) ; } int res = 0 ; for(i = 1 ; i <= n ; i++) if (F[i] == i) res++ ; printf("Case %d: %d\n" , Case , res) ; } return 0; }View Code
相关文章推荐
- u-boot2010.03 第一阶段--start.S
- 实验二:FFT算法的MATLAB实现
- 算法——大整数乘法
- 将linux默认python升级到2.7.4版本
- 手斧Linux – 从LFS到Funtoo (37)
- java web 中分页技术
- 自定义上滑菜单SlidingUpMenu
- 常用GCC命令
- python 常用模块之ConfigParser
- php 文件上传实例代码
- 让MyEclipse支持mac的Retina屏解决字体模糊的问题
- 产品技术寻找买家
- 实验一 离散时间序列卷积和MATLAB实现
- Excel Sheet Column Number
- 用一行语句判断一个整数是否为2的幂
- 【待思考】排序算法——快速排序
- js继承的实现
- u-boot2010.03 配置编译目标分析
- 仰视源码,实现memcpy
- logstash grok 分割匹配日志