Skip to content

Instantly share code, notes, and snippets.

@KerryJones
Last active December 19, 2018 16:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KerryJones/5f1dca01b906910d84c36be5b676fae4 to your computer and use it in GitHub Desktop.
Save KerryJones/5f1dca01b906910d84c36be5b676fae4 to your computer and use it in GitHub Desktop.
Python 3 - Disjoint Set
class DisjointSet:
sets = {}
rank = {}
def __init__(self, arr):
for v in arr:
self.sets[v] = v
self.rank[v] = 0
def merge(self, v1, v2):
r1, r2 = self.get_root(v1), self.get_root(v2)
if self.rank[r1] > self.rank[r2]:
self.sets[r2] = r1
elif self.rank[r2] > self.rank[r1]:
self.sets[r1] = r2
else:
self.sets[r1] = r2
self.rank[r2] += 1
def get_root(self, v):
if v == self.sets[v]:
return v
return self.get_root(self.sets[v])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment