알고리즘 문제풀이
안정적인 네트워크 (백준 2406)
wiojfe
2023. 8. 12. 23:22
전형적인 MST문제인데 첫 컴퓨터를 제외하고 MST를 형성하면 된다.
import sys
import heapq
input = sys.stdin.readline
n,m = map(int, input().split())
parent= [i for i in range(n+1)]
def find(x):
if x != parent[x]:
parent[x] = find(parent[x])
return parent[x]
def union(a,b):
a = find(a)
b = find(b)
if a<b :
parent[b] = a
else :
parent[a] =b
for i in range(m):
x,y =map(int, input().split())
union(x,y)
edges = []
heapq.heapify(edges)
for i in range(1,n+1):
oneline = list(map(int, input().split()))
for j in range(i+1, n+1):
if i == 1 :
continue
else:
heapq.heappush(edges, (oneline[j-1], i, j ))
total = 0
cnt = 0
toadd= []
while edges:
cost, x,y = heapq.heappop(edges)
if find(x) == find(y):
continue
else:
total +=cost
cnt += 1
union(x,y)
toadd.append((x,y))
print(total, cnt )
if len(toadd)==0 :
exit()
else :
for i in range(len(toadd)):
print(toadd[i][0] , toadd[i][1])