随笔-141  评论-9  文章-3  trackbacks-0

并查集提供的操作:
1. 合并两个集合。
2. 判断两个元素是否在同一个集合里边。

#include <iostream>
#include 
<cstdio>
#include 
<cstdlib>
#include 
<cmath>
#include 
<cstring>
 
using namespace std;
 
const int MAXN=1001;
 
class UFS{
    
public:
    
int F[MAXN];
    tUFS()
{
        
for (int i=1;i<MAXN;i++)F[i]=-i;
    }

    
int findroot(int a){
        
int r=a,t;
        
while (F[r]>0) r=F[r];
        
while (F[a]>0{t=F[a];F[a]=r;a=t;}
        
return r;
    }

    
void Union(int a,int b){
        F[findroot(a)]
=findroot(b);
    }

    
bool Judge(int a,int b){
        
return F[findroot(a)]==F[findroot(b)];
    }

    
int getroot(int a){
        
return -F[findroot(a)];
    }

}
;
posted on 2011-05-03 20:27 小阮 阅读(271) 评论(0)  编辑 收藏 引用 所属分类: 数据结构和算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理