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