Pagini recente » Cod sursa (job #1488916) | Cod sursa (job #1628218) | Cod sursa (job #1195466) | Cod sursa (job #2173874) | Cod sursa (job #3255451)
import heapq
import sys
sys.stdin = open('apm.in', 'r')
sys.stdout = open('apm.out', 'w')
n, m = map(int, input().split())
gr = { i : [] for i in range(1, n + 1) }
start = None
for i in range(m):
x, y, cost = map(int, input().split())
if start is None:
start = x
gr[x].append((y, cost))
gr[y].append((x, cost))
def prim(start):
viz = set()
apm = {i: [] for i in range(1, n + 1)}
total_cost = 0
pq = []
for urm, cur_cost in gr[start]:
heapq.heappush(pq, (cur_cost, start, urm)) # cost nod vecin
viz.add(start)
while pq and len(viz) < n:
cost, nod, vecin = heapq.heappop(pq)
if vecin not in viz:
viz.add(vecin)
total_cost += cost
apm[nod].append((vecin, cost))
apm[vecin].append((nod, cost))
for urm, cur_cost in gr[vecin]:
if urm not in viz:
heapq.heappush(pq,(cur_cost, vecin, urm)) # cost nod vecin
return total_cost, len(viz) - 1, apm
total_cost, nr_muchii, apm = prim(start)
print(total_cost)
print(nr_muchii)
s = set()
res = []
for nod in range(1, n + 1):
for vecin, _ in apm[nod]:
if (nod, vecin) not in s:
res.append(f"{nod} {vecin}")
s.add((nod, vecin))
s.add((vecin, nod))
print('\n'.join(map(str, res)))