백준 16398 : 행성 연결 (Python)

liliili·2022년 12월 30일

백준

목록 보기
121/214

본문 링크

import sys
input=sys.stdin.readline

def Find(x):

    if x!=disjoint[x]:
        disjoint[x]=Find(disjoint[x])
    return disjoint[x]

N=int(input())

edge=[] ; disjoint=[ _ for _ in range(N+1) ] ; total=0

for i in range(N):

    L=list(map(int,input().split()))

    for j in range(N):
        edge.append( (L[j] , i+1,j+1) )

edge.sort(key=lambda x:x[0])

for value,x,y in edge:

    x=Find(x)
    y=Find(y)

    if x!=y:
        if x>y:
            disjoint[x]=y
        else:
            disjoint[y]=x
        total+=value

print(total)

📌 어떻게 접근할 것인가?

처음에 입력이 헷갈렸는데 그냥 모든 정점들에 대해서 연결해주면 됩니다. 다만 좌표들의 위치가 2차원 좌표로 주어지므로 프림 알고리즘보다 간선만 생각하면 되는 크루스칼 알고리즘을 사용했습니다.

0개의 댓글