Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30451
  • 博文数量: 6
  • 博客积分: 167
  • 博客等级: 入伍新兵
  • 技术积分: 89
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-28 20:14
文章分类

全部博文(6)

文章存档

2011年(6)

我的朋友
最近访客

分类: C/C++

2011-11-01 16:55:20

quick find
  1. #include<stdio.h>
  2. #define N 10000
  3. main()
  4. {int i,p,q,t,id[N];
  5.     for(i=0;i<N;i++)id[i]=i;
  6.     while(scanf("%d %d",&p,&q)==2)
  7.     {
  8.         if(id[p]==id[q])continue;
  9.         for(t=id[p],i=0;i<N;i++)
  10.             if(id[i]==t)id[i]=id[q];
  11.         printf(" %d %d\n",p,q);
  12.     }
  13. }
quick union
  1. #include<stdio.h>
  2. #define N 10000
  3. main()
  4. {int i,j,p,q,id[N];
  5.     for(i=0;i<N;i++)id[i]=i;
  6.     while(scanf("%d %d",&p,&q)==2)
  7.     {
  8.         for(i=p;i!=id[i];i=id[i]);
  9.         for(j=q;j!=id[j];j=id[j]);
  10.         if(i==j)continue;
  11.         id[i]=j;
  12.         printf(" %d %d\n",p,q);
  13.     }
  14. }
weighted quick union
  1. #include<stdio.h>
  2. #define N 10000
  3. main()
  4. {int i,j,p,q,id[N],sz[N];
  5.     for(i=0;i<N;i++){id[i]=i;sz[i]=1;}
  6.     while(scanf("%d %d",&p,&q)==2)
  7.     {
  8.         for(i=p;i!=id[i];i=id[i]);
  9.         for(j=q;j!=id[j];j=id[j]);
  10.         if(i==j)continue;
  11.         if(sz[i]<sz[j]){id[i]=j;sz[j]+=sz[i];}
  12.         else{id[j]=i;sz[i]+=sz[j];}
  13.         printf(" %d %d\n",p,q);
  14.     }
  15. }


阅读(1740) | 评论(0) | 转发(0) |
0

上一篇:认识补码

下一篇:重识补码

给主人留下些什么吧!~~