2019-07-17 04:07:25 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
num_nodes, num_edges = list(map(int, input().strip().split()))
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
edges = []
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
for i in range(num_edges):
|
2019-10-05 05:14:13 +00:00
|
|
|
node1, node2, cost = list(map(int, input().strip().split()))
|
|
|
|
edges.append((i, node1, node2, cost))
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
edges = sorted(edges, key=lambda edge: edge[3])
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
parent = list(range(num_nodes))
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
def find_parent(i):
|
2019-10-05 05:14:13 +00:00
|
|
|
if i != parent[i]:
|
|
|
|
parent[i] = find_parent(parent[i])
|
|
|
|
return parent[i]
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
minimum_spanning_tree_cost = 0
|
|
|
|
minimum_spanning_tree = []
|
2018-10-19 12:48:28 +00:00
|
|
|
|
2019-07-17 04:07:25 +00:00
|
|
|
for edge in edges:
|
2019-10-05 05:14:13 +00:00
|
|
|
parent_a = find_parent(edge[1])
|
|
|
|
parent_b = find_parent(edge[2])
|
|
|
|
if parent_a != parent_b:
|
|
|
|
minimum_spanning_tree_cost += edge[3]
|
|
|
|
minimum_spanning_tree.append(edge)
|
|
|
|
parent[parent_a] = parent_b
|
2019-07-17 04:07:25 +00:00
|
|
|
|
|
|
|
print(minimum_spanning_tree_cost)
|
|
|
|
for edge in minimum_spanning_tree:
|
2019-10-05 05:14:13 +00:00
|
|
|
print(edge)
|