- class UFSet
- {
- typedef struct UFSetNode
- {
- long parent;
- long rank;
- }UFSetNode;
- public:
- UFSet(long sz)
- {
- size = sz;
- elem = new UFSetNode[size];
- for(long i = 0; i < size; i++)
- {
- elem[i].parent = -1;
- elem[i].rank = 0;
- }
- }
- ~UFSet() { delete [] elem; }
- long FindSet(long x)
- {
- long i, temp;
- for(i = x; elem[i].parent > 0; i = elem[i].parent)
- ;
- while(i != x)
- {
- temp = elem[x].parent;
- elem[x].parent = i;
- x = temp;
- }
- return i;
- }
- void Union(long a, long b)
- {
- long fa, fb;
- fa = FindSet(a);
- fb = FindSet(b);
- if(fa == fb)
- {
- return;
- }
- if(elem[fa].parent < elem[fb].parent)
- {
- elem[fa].parent += elem[fb].parent;
- elem[fb].parent = fa;
- }
- else
- {
- elem[fb].parent += elem[fa].parent;
- elem[fa].parent = fb;
- }
- }
- private:
- long size;
- UFSetNode *elem;
- };
10-12
1919
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-18
07-18
07-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交