매번 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:]
'알고리즘 문제풀이' 카테고리의 다른 글
안정적인 네트워크 (백준 2406) (0) | 2023.08.12 |
---|---|
연애 혁명 ( 27498 백준) (0) | 2023.08.09 |
달나라 토끼를 위한 구매대금 지불 도우미(백준 17212) (0) | 2023.08.09 |
악수 (백준 8394) (0) | 2023.08.09 |
정복자(백준 14950) (0) | 2023.08.08 |