알고리즘/baekjoon

[ baekjoon ] 전기가 부족해 10423번 ( python )

Yanoo 2021. 5. 30. 22:39
728x90
반응형

문제

백준 10423 전기가 부족해 풀이 ( 파이썬 )

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

 

10423번: 전기가 부족해

첫째 줄에는 도시의 개수 N(1 ≤ N ≤ 1,000)과 설치 가능한 케이블의 수 M(1 ≤ M ≤ 100,000)개, 발전소의 개수 K(1 ≤ K ≤ N)개가 주어진다. 둘째 줄에는 발전소가 설치된 도시의 번호가 주어진다. 셋째

www.acmicpc.net

 

 

풀이

Union을 이용하는데 각 발전소 위치를 무조건 parent로 만들기 위해 가장 낮은 숫자로 설정한다.(여기서는 0으로 설정)

그리고 비용이 가장 적게 들어야 하므로 비용이 가장 적은 순서대로 정렬한 후 union parent를 해주면 된다.

# 유니온으로 풀자!
import sys

input=sys.stdin.readline

n,m,k=map(int,input().split())
power=list(map(int,input().split()))

def find_parent(parent,x):
    if parent[x] !=x:
        return find_parent(parent,parent[x])
    return x

def union_parent(parent,a,b):
    a = find_parent(parent,a)
    b = find_parent(parent,b)
    if a<b:
        parent[b]=a
    else:
        parent[a]=b

parent=[0]*(n+1)
arr=[]

for i in range(1,n+1):
    # 발전소라면 parent가 0이다
    if i in power:
        continue
    # 발전소가 아니라면 자기자신
    parent[i]=i

for i in range(m):
    s,e,d=map(int,input().split())
    arr.append((s,e,d))

result=0

arr.sort(key=lambda x:x[2])

for ele in arr:
    s,e,d=ele
    if find_parent(parent,s)!=find_parent(parent,e):
        union_parent(parent,s,e)
        result+=d

print(result)
728x90
반응형