def spanning_tree_edges(graph, edge_weight): components = UnionFind(memory_usage=graph.MemoryUsage) sorted_edges = DHeap(memory_usage=graph.MemoryUsage) for edge in graph.edges(): sorted_edges.insert(edge, key=edge_weight[edge]) while sorted_edges: edge = sorted_edges.deletemin() if components.link(*edge) is not None: yield edge