def min_tree(self): e = sorted(self.e, key=operator.itemgetter(2)) dsu = DSU(self.vertices) res = WeightedGraph(self.vertices) for edge in e: if dsu.find(edge[0]) != dsu.find(edge[1]): dsu.unite(edge[0], edge[1]) res.add_directed_link(edge[0], edge[1], edge[2]) return res
def min_tree(self): a = WeightedGraph() dsu = DSU() edges = list() for v in self.vertexes.keys(): dsu.make_set(v) a.add_vertex(v) for vertex in self.vertexes[v]: edges.append((self.vertexes[v][vertex], (v, vertex))) for (_, (u, v)) in sorted(edges): if dsu.find_set(u) != dsu.find_set(v): a.add_direct_link(u, v, self.vertexes[u][v]) dsu.union_sets(u, v) return a