def max_k_clustering(gr, k): sorted_edges = sorted(gr.get_edge_weights()) uf = UnionFind() #initialize each node as its cluster for n in gr.nodes(): uf.insert(n) for (w, (u, v)) in sorted_edges: if uf.count_groups() <= k: return uf.get_sets() if uf.get_leader(u) != uf.get_leader(v): uf.make_union(uf.get_leader(u), uf.get_leader(v))