def count_components(self, n: int, edges: List[List[int]]) -> int:
parent = {i: i for i in range(n)}
def find(a):
if parent[a] != a:
parent[a] = find(parent[a])
return parent[a]
def union(a, b):
a = find(a)
b = find(b)
parent[b] = a
for a, b in edges:
union(a, b)
for a, b in edges:
find(a)
find(b)
return len(set(v for k, v in union_find.items()))