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