test/4C.py
2026-07-01 19:46:51 +03:00

41 lines
892 B
Python

import sys
data = sys.stdin.read().split()
n, m = int(data[0]), int(data[1])
edges = []
idx = 2
for i in range(m):
edges.append([int(data[idx+2]), int(data[idx]), int(data[idx+1]), i])
idx += 3
edges.sort()
def find(i, p):
if p[i] == i: return i
p[i] = find(p[i], p)
return p[i]
p = list(range(n + 1))
s1 = 0
mst_edges = []
for j in range(m):
w, u, v, eid = edges[j]
ru, rv = find(u, p), find(v, p)
if ru != rv:
p[ru] = rv
s1 += w
mst_edges.append(j)
s2 = float('inf')
for i in mst_edges:
p = list(range(n + 1))
w_tot = 0
cnt = 0
for j in range(m):
if j == i:
continue
w, u, v, eid = edges[j]
ru, rv = find(u, p), find(v, p)
if ru != rv:
p[ru] = rv
w_tot += w
cnt += 1
if cnt == n - 1 and w_tot < s2:
s2 = w_tot
print(s1, s2)