[BOJ] 16562. ์นœ๊ตฌ๋น„ (๐Ÿฅ‡, ๋ถ„๋ฆฌ ์ง‘ํ•ฉ)

lemythe423ยท2023๋…„ 10์›” 15์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
69/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

์ค€์„์ด๋Š” ์ตœ์†Œํ•œ์˜ ๋น„์šฉ์œผ๋กœ ์นœ๊ตฌ๋ฅผ ์‚ฌ๊ท€๊ณ  ์‹ถ์–ดํ•œ๋‹ค. ์นœ๊ตฌ์˜ ์นœ๊ตฌ๋Š” ์นœ๊ตฌ๋ผ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ 1, 2๊ฐ€ ์นœ๊ตฌ๊ณ  1, 3์ด ์นœ๊ตฌ๋ผ๋ฉด 2, 3 ์—ญ์‹œ ์นœ๊ตฌ๊ฐ€ ๋œ๋‹ค๋Š” ์†Œ๋ฆฌ๋‹ค. ๊ฒฐ๊ตญ ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ถ„๋ฆฌ์ง‘ํ•ฉ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ณดํ†ต ๋ถ„๋ฆฌ์ง‘ํ•ฉ์—์„œ๋Š” ์ˆซ์ž๊ฐ€ ์ž‘์€ ๊ฐ’์„ ๋Œ€ํ‘œ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ตœ์†Œ ๋น„์šฉ์ด ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์นœ๊ตฌ๋น„๊ฐ€ ์ ์€ ๊ฐ’์„ ๋Œ€ํ‘œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

๋ชจ๋“  ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ฐ์ž ์ด๋ฃจ๋Š” ์ง‘ํ•ฉ์„ ๋งŒ๋“  ํ›„์— ์ตœ์ข…์ ์œผ๋กœ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’๋“ค์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋•Œ ๋Œ€ํ‘œ ๊ฐ’๋“ค์€ ์• ์ดˆ์— ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์„ค์ •ํ•ด๋‘์—ˆ์œผ๋ฏ€๋กœ ์ด ๊ฐ’๋“ค์— ํ•ด๋‹นํ•˜๋Š” ์นœ๊ตฌ๋น„๋“ค์„ ๋”ํ•ด๋‚˜๊ฐ„๋‹ค. ๋”ํ•˜๋Š” ๋„์ค‘์— ์ค€์„์ด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ˆ k๋ฅผ ๋„˜์–ด์„ ๋‹ค๋ฉด ๋ชจ๋‘์™€ ์นœ๊ตฌ๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋ฏ€๋กœ "Oh no"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

import sys
input = sys.stdin.readline

def find(x):
    if rep[x] != x:
        rep[x] = find(rep[x])
    return rep[x]

def union(x, y):
    x = find(x)
    y = find(y)
    
    if A[x] <= A[y]:
        rep[y] = x 
    else:
        rep[x] = y

N, M, K = map(int, input().split())
A = [0]+list(map(int, input().split()))
rep = [i for i in range(N+1)]
for _ in range(M):
    v, w = map(int, input().split())
    if find(v) == find(w):
        continue
    union(v, w)

rep_lst = list(set(find(i) for i in range(1, N+1)))
cost = 0
for x in rep_lst:
    cost += A[x]
    if cost > K:
        print("Oh no")
        exit()
print(cost)
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€