def kruskal(graph): djs = DisjointSet(numel=len(graph.nodes)) all_nodes = set(range(len(graph.nodes))) weight = 0 edges = list(graph.get_edges()) edges.sort(key=lambda tup: tup[2]) fs = set() for e in edges: source = e[0] dest = e[1] wt = e[2] if not djs.same_set(source, dest): fs.add(source) fs.add(dest) weight += wt djs.union(source, dest) return weight