practivceAlgorithm/백준
[백준][Python] 2406 안정적인 네트워크
findTheValue
2021. 9. 7. 11:18
크루스칼
import sys
input = sys.stdin.readline
from heapq import heappop,heappush
def find(x):
if parent[x]==x:
return x
parent[x] = find(parent[x])
return parent[x]
def union(a,b):
a = find(a)
b = find(b)
if level[a] >= level[b]:
parent[b] = a
if level[a]==level[b]:
level[a] += 1
else:
parent[a] = b
n, m = map(int, input().split())
parent = {i:i for i in range(1,n+1)}
level = {i: 0 for i in range(1,n+1)}
# 2~n번컴퓨터까지 MST를 만들어라?
for _ in range(m):
x, y = map(int, input().split())
if find(x) != find(y):
union(x,y)
cost_matrix = [list(map(int, input().split())) for _ in range(n)]
costs = []
for i in range(1,n-1):
for j in range(i+1,n):
heappush(costs,(cost_matrix[i][j],i+1,j+1))
min_cost = 0
cnt = 0
coms = []
while costs:
c, a, b = heappop(costs)
if find(a) != find(b):
union(a,b)
min_cost += c
cnt += 1
coms.append([a,b])
print(min_cost, cnt)
for com in coms:
print(*com)