File tree Expand file tree Collapse file tree 3 files changed +68
-0
lines changed
Expand file tree Collapse file tree 3 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 1+ struct Node {
2+ int rank, value;
3+ shared_ptr<Node> parent;
4+ };
5+
6+ class DisjointSet {
7+ public:
8+ map<int , shared_ptr<Node> > mp;
9+ void makeSet (int n) {
10+ shared_ptr<Node> nK = make_shared<Node>();
11+ nK->rank = 0 ;
12+ nK->value = n;
13+ nK->parent = nK;
14+ mp[n] = nK;
15+ return ;
16+ }
17+
18+ shared_ptr<Node> findParentDriver (shared_ptr<Node> p) {
19+ if (p->parent == p)
20+ return p;
21+
22+ findParentDriver (p->parent );
23+ return p->parent ;
24+ }
25+
26+ shared_ptr<Node> findParent (int n) {
27+ shared_ptr<Node> pt = this ->mp [n];
28+ return findParentDriver (pt);
29+ }
30+
31+ bool Union (int a, int b) {
32+ shared_ptr nodeA = mp[a];
33+ shared_ptr nodeB = mp[b];
34+
35+ shared_ptr parentA = findParent (a);
36+ shared_ptr parentB = findParent (b);
37+
38+ if (parentA->value == parentB->value )
39+ return false ;
40+
41+ if (parentA->rank >= parentB->rank ) {
42+ parentB->parent = parentA;
43+ parentB->rank = (parentA->rank == parentB->rank ) ? (parentB->rank + 1 ) : parentB->rank ;
44+ } else {
45+ parentA->parent = parentB;
46+ }
47+ return true ;
48+ }
49+ };
50+
Original file line number Diff line number Diff line change 1+ #include < map>
2+ #include < iostream>
3+ using namespace std ;
4+ #include " DisjointSet.hpp"
5+
6+ int main () {
7+ DisjointSet *ds = new DisjointSet ();
8+
9+ ds->makeSet (1 );
10+ ds->makeSet (2 );
11+ ds->makeSet (3 );
12+ ds->makeSet (4 );
13+
14+ ds->Union (1 , 2 );
15+
16+ cout << ds->findParent (2 ).get ()->value << endl;
17+ }
18+
You can’t perform that action at this time.
0 commit comments