#include<stdio.h>
#include
<stdlib.h>
 
 #ifndef _DisjSet_H
 
 typedef 
int DisjSet[NumSets+1];
 typedef 
int setType;
 typedef 
int ElementType;
 
 
void Initilialize(DisjSet S);
 setType Find_semplice(ElementType x,DisjSet s);
 setType Find_path_compression(ElementType x,DisjSet s);
 
void SetUnion_semplice(DisjSet s,setType Root1,setType Root2);
 
 
#endif _DisjSet_H
 
 
void Initilialize(DisjSet s)
 
{
      
for(int step=1;step<NumSets+1;step++)
         
      }

     
 setType Find_semplice(ElementType x,DisjSet s)
 
{
      
if(s[x]<1return x;
      
else
          
return Find(s[x],s);  
      }

     
 setType Find_path_compression(ElementType x,DisjSet s) 
 
{
      
if(s[x]<1return x;
      
else
          
return s[x]=Find(s[x],s); 
      }

 
void SetUnion_semplice(DisjSet s,setType Root1,setType Root2)
 
{
      s[Root2]
=Root1;
      }

     
 
void SetUnion_number(DisijSet s,setType Root1,setType Root2)                                                             
 
{                                                          
      
if(s[Root1]<s[Root2])  // 1树容量更大         
         {
             s[Root1]
+=s[Root2];  // 增加树容量
             s[Root2]=Root1;
             }

      
else
          
{
              s[Root2]
+=s[Root1];
              s[Root1]
=Root2;
              }

      }

     
 
void SetUnion_deep(DisijSet s,setType Root1,setType Root2) 
 
{
      
if(s[Root1]<s[Root2])  s[Root2]=Root1;
      
else
      
{
         
if(s[Root1]==s[Root2])
            s[Root2]
--;
         s[Root1]
= Root2; 
         }
 
           
      }