예제 #1
0
def mst(n, edges):
    weight_sum, m, tree = 0, n - 1, []
    edges.sort(key=lambda x: -x[2])
    sets = DS()
    vertices = [sets.make_set(i) for i in range(n)]
    while m > 0:
        edge = edges.pop()
        if not sets.union(vertices[edge[0]], vertices[edge[1]]):
            continue
        tree.append(edge)
        weight_sum += edge[2]
        m -= 1
    return tree, weight_sum