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