모든 컴퓨터를 연결해야하므로 Kruskal 알고리즘을 사용하자
- arr에 간선들을 저장한뒤 비용을 기준으로 정렬을 한다.
- 두 컴퓨터의 root를 찾은뒤 같지 않다면 비용을 더해주고 더 큰 root값의 root를 작은 root로 바꾸어준다.
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
arr = []
root = [i for i in range(N+1)]
for _ in range(M):
s, e, v = map(int, input().split())
arr.append([v, s, e])
def findRoot(x):
if root[x] != x:
root[x] = findRoot(root[x])
return root[x]
result = 0
arr.sort()
for v, s, e in arr:
sRoot = findRoot(s)
eRoot = findRoot(e)
if sRoot != eRoot:
result += v
if sRoot < eRoot:
root[eRoot] = sRoot
else:
root[sRoot] = eRoot
print(result)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 1516] 게임 개발(python) (0) | 2021.05.04 |
---|---|
[백준 2458] 키 순서 (python) (0) | 2021.05.04 |
[백준 2252] 줄 세우기 (python) (0) | 2021.05.03 |
[백준 1717] 집합의 표현 (python) (0) | 2021.05.03 |
[백준 2493] 탑 (python) (0) | 2021.05.01 |
최근댓글