并查集类

并查集类

并查集提供的操作:
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)];
    }

}
;

你可能感兴趣的:(并查集类)