알고리즘 문제풀이
MST 게임 (백준 16202)
wiojfe
2023. 8. 9. 17:09
매번 MST를 수행할 때 가중치가 가장 낮은 노선을 사용 안 하기 때문에 가장 첫 노선을 매번 제거한다.
import sys
import heapq
input = sys.stdin.readline
n,m,k = map(int, input().split())
edges =[]
gra=[[]for _ in range(n+1)]
ans = 0
def find(a):
if a != parent[a] :
parent[a] = find(parent[a])
return parent[a]
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):
a,b= map(int, input().split())
edges.append((i+1,a,b))
edges.sort()
for i in range(k):
edges.sort()
parent=[i for i in range(n+1)]
cnt = 0
ans = 0
for cost, x,y in edges:
if find(x) == find(y):
continue
else :
cnt += 1
ans += cost
union(x,y)
if( cnt ==n-1):
print(ans, end = ' ')
else:
print(0, end =' ')
edges = edges[1:]