博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2524 Ubinquitous Religions (并查集)
阅读量:6769 次
发布时间:2019-06-26

本文共 795 字,大约阅读时间需要 2 分钟。

依旧简单并查集,拿1611火速改了改火速提交,果断PE...把输出的最后一个空格放%d前面了,真活该不运行就交。

但是这题有个疑问,为什么按秩合并没有比直接合并快??

code: 

#include<cstdio>
int p[
50005], r[
50005] ;
void make_set(
int n){
    
for(
int i=
0; i<n; i++){
        p[i] = i ;
        r[i] = 
0 ;
    }
}
int find_set(
int x){
    
if(x!=p[x])
        p[x] = find_set(p[x]) ;
    
return p[x] ;
}
void union_set(
int x, 
int y){
    x = find_set(x) ;
    y = find_set(y) ;
    
if(x!=y){
        
if(r[x]>r[y])
            p[y] = x ;
        
else{
            p[x] = y ;
            
if(r[x]==r[y])
                r[x] ++ ;
        }
    }
}
int main(){
    
int n, m, i, x, y, sum, t=
0 ;
    
while(~scanf(
"
%d%d
", &n, &m)&&(n+m)){
        t ++ ;
        make_set(n) ;
        
while(m--){
            scanf(
"
%d
", &x) ;
            scanf(
"
%d
", &y) ;
            union_set(x, y) ;
        }
        sum = 
0 ;
        
for(i=
0; i<n; i++)
            
if(i==find_set(i))
                sum ++ ;
        printf(
"
Case %d: %d\n
", t, sum) ;
    }
    
return 
0 ;

} 

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/01/30/2332446.html

你可能感兴趣的文章
dtoj#4212. 小X爱旅行(travel)
查看>>
makefile学习笔记
查看>>
EF--DB First
查看>>
[你必须知道的.NET] 品味类型---从通用类型系统开始
查看>>
Computer Science - CS:APP - 2.1 信息存储
查看>>
opencv 图片位移
查看>>
C#代码精确到毫秒时间戳写法
查看>>
我的第一个博客——Fragment遇到的问题
查看>>
【shell】sed指定追加模式空间的次数
查看>>
学习OpenCV——关于三通道的CvMat的求和问题
查看>>
【洛谷 P4008】 [NOI2003]文本编辑器 (Splay)
查看>>
RecyclerView使用详解(二)
查看>>
设计模式-代理模式
查看>>
企业流程管理的控制环境
查看>>
iso8583报文自学笔记
查看>>
ASP.NET MVC Spring.NET NHibernate 整合
查看>>
CSS系列:CSS的继承与层叠特性
查看>>
安全svn快速安装
查看>>
nginx正向代理访问百度地图API
查看>>
MySQL 错误
查看>>