Pagini recente » Cod sursa (job #2400235) | Cod sursa (job #1271337) | Istoria paginii utilizator/vreaulaoxford | Cod sursa (job #2901581) | Cod sursa (job #3177544)
from typing import List
with open("apm.in", "r") as f:
n, m = map(int, f.readline().split())
graf = []
for i in range(m):
x, y, c = map(int, f.readline().split())
graf.append([x, y, c, 0])
graf.sort(key=lambda x: x[2])
sol = []
h: List[int] = [0 for _ in range(n + 1)]
d: List[int] = [i for i in range(n + 1)]
def Union(x: int, y: int):
if h[x] > h[y]:
d[y] = x
else:
d[x] = y
if h[x] == h[y]:
h[y] += 1
def Find(x: int) -> int:
r, y = x, x
t: int
while r != d[r]:
r = d[r]
while y != r:
t = d[y]
d[y] = r
y = t
return r
s = 0
for i in range(m):
p = Find(graf[i][0])
q = Find(graf[i][1])
if p != q:
s += graf[i][2]
graf[i][3] = 1
Union(p, q)
with open("apm.out", "w") as f:
f.write(f"{s}\n{n - 1}\n")
for i in range(m):
if graf[i][3] == 1:
f.write(f"{graf[i][0]} {graf[i][1]}\n")