示例#1
0
 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
示例#2
0
 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