1922번: 네트워크 연결

이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.

www.acmicpc.net


 

모든 컴퓨터를 연결해야하므로 Kruskal 알고리즘을 사용하자

 

  1. arr에 간선들을 저장한뒤 비용을 기준으로 정렬을 한다.
  2. 두 컴퓨터의 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기