-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnode.h
56 lines (47 loc) · 1017 Bytes
/
node.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class node {
private:
char mItem;
node* mParent;
int mRank;
public:
node(char item) {
mItem = item;
mParent = this;
mRank = 0;
}
char getName() {
return mItem;
}
node* getRepresentative() {
if(mParent != this)
return mParent->getRepresentative();
return this;
}
int getRank() {
return mRank;
}
void setRank(int rank) {
mRank = rank;
}
void setRepresentative(node* representative) {
mParent = representative;
}
void makeUnion(node* other) {
Link(findSet(this), findSet(other));
}
static void Link(node* x, node* y) {
if(x->getRank() > y->getRank()) {
y->setRepresentative(x);
} else {
x->setRepresentative(y);
if(x->getRank()==y->getRank()) {
y->setRank(y->getRank()+1);
}
}
}
static node* findSet(node* x) {
if(x->getRepresentative() != x)
x->setRepresentative(findSet(x->getRepresentative()));
return x->getRepresentative();
}
};