흙금이네 블로그

[BOJ] 16562 - 친구비 (Python) 본문

알고리즘

[BOJ] 16562 - 친구비 (Python)

흙금 2023. 3. 16. 18:42

 

 

아이디어

 

유니온 파인드를 이용하여 상호 배타적 집합의 개수를 구하고, 집합 내 최소 비용의 합을 구한다.

 

 

풀이

 

import sys

input = sys.stdin.readline

def solution():
    for _ in range(M):
        v, w = map(int, input().split())
        union(v, w)
    for i in range(1, N+1):
        find(i)
    res = 0
    for i in set(group):
        res += A[i]
    if res <= k:
        print(res)
    else:
        print('Oh no')

def find(n):
    temp = n
    while n != group[n]:
        n = group[n]
    group[temp] = n
    return n

def union(v, w):
    v = find(v)
    w = find(w)
    if v > w:
        v, w = w, v
    group[w] = v
    if A[w] < A[v]:
        A[v] = A[w]

N, M, k = map(int, input().split())
A = [0]+list(map(int, input().split()))
group = [i for i in range(N+1)]
solution()

 

Comments