chyam

[백준] 1922번, python - 네트워크 연결(Union-Find) 본문

백준

[백준] 1922번, python - 네트워크 연결(Union-Find)

chyam_eun 2026. 1. 26. 14:32

https://www.acmicpc.net/problem/1922

import sys
import heapq
input = sys.stdin.readline

n = int(input())
m = int(input())
computers = []
res = 0
parent = [0] * (n+1)

def find(x): # 특정 원소가 속한 집합 찾기 
    if parent[x] != x: # 루트 노드가 아니라면 루트 노드 찾을때까지 재귀적으로 호출 
        parent[x] = find(parent[x])
    return parent[x]

def union(a,b): # 합치기
    a, b = find(a), find(b) # 속하는 집합의 부모를 찾음
    if a < b: # 부모의 숫자가 더 작은것이 부모가 된다.
        # ex) 2의 부모가 1이고, 5의 부모가 3이면 3의 부모는 1이된다.
        parent[b] = a
    else:
        parent[a] = b

for _ in range(m):
    a, b, c = map(int,input().split()) # a컴퓨터, b컴퓨터, 비용
    computers.append((c, a, b)) # 비용, a컴퓨터, b컴퓨터

for i in range(1, n+1):
    parent[i] = i # 자기 자신을 부모로 설정

computers.sort() # 비용을 오름차순으로 설정 

for c, a, b in computers:
    if find(a) != find(b): # 부모가 같지 않다면 = 사이클이 되면 안됨!
        union(a,b) # 합쳐준다.
        res += c # 비용도 더해준다.

print(res)