现在的位置: 首页 > 综合 > 正文

并查集

2014年03月06日 ⁄ 综合 ⁄ 共 1143字 ⁄ 字号 评论关闭
  1. class UFSet
  2. {
  3.     typedef  struct  UFSetNode
  4.     {
  5.         long  parent;
  6.         long  rank;
  7.     }UFSetNode;   
  8.        
  9. public
  10.     
  11.     UFSet(long  sz)
  12.     {
  13.         size = sz;
  14.         
  15.         elem = new UFSetNode[size];
  16.         
  17.         for(long  i = 0; i < size; i++)
  18.         {
  19.             elem[i].parent = -1; 
  20.             elem[i].rank = 0;
  21.         }         
  22.     }
  23.     ~UFSet() { delete [] elem; }
  24.     long  FindSet(long  x)
  25.     {
  26.         long  i, temp;
  27.         for(i = x; elem[i].parent > 0; i = elem[i].parent)
  28.         ;
  29.         while(i != x)
  30.         {
  31.             temp = elem[x].parent;
  32.             elem[x].parent = i;
  33.             x = temp;
  34.         }
  35.         
  36.         return  i;
  37.     }
  38.     void Union(long a, long b)
  39.     {
  40.         long  fa, fb;
  41.         fa = FindSet(a);
  42.         fb = FindSet(b);
  43.         if(fa == fb)
  44.         {
  45.             return;
  46.         }    
  47.         if(elem[fa].parent < elem[fb].parent)
  48.         {
  49.             elem[fa].parent += elem[fb].parent;
  50.             elem[fb].parent = fa;
  51.         }
  52.         else
  53.         {
  54.             elem[fb].parent += elem[fa].parent;
  55.             elem[fa].parent = fb;
  56.         }
  57.     }
  58.     
  59. private:
  60.     
  61.     long        size;
  62.     UFSetNode  *elem;
  63. };  

抱歉!评论已关闭.