[BOJ][๐ŸŸก4][๋ฐฑ์ค€#01922] ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #1922


๋ฌธ์ œ

๋„ํ˜„์ด๋Š” ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ํ—ˆ๋ธŒ๊ฐ€ ์žˆ์ง€ ์•Š์•„ ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‘๊ฐ€ ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. (a์™€ b๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค๋Š” ๋ง์€ a์—์„œ b๋กœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. a์—์„œ b๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์ด ์žˆ๊ณ , b์™€ c๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์ด ์žˆ์œผ๋ฉด a์™€ c๋Š” ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค.) ๊ทธ๋Ÿฐ๋ฐ ์ด์™•์ด๋ฉด ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ์„ ์ตœ์†Œ๋กœ ํ•˜์—ฌ์•ผ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ ์™ธ์— ๋‹ค๋ฅธ ๊ณณ์— ๋ˆ์„ ๋” ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด์ œ ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ๋น„์šฉ์„ ์ถœ๋ ฅํ•˜๋ผ. ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ปดํ“จํ„ฐ์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 1000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์„ ์˜ ์ˆ˜ M (1 โ‰ค M โ‰ค 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M+2๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ด M๊ฐœ์˜ ์ค„์— ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๋“œ๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋น„์šฉ์˜ ์ •๋ณด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ๋งŒ์•ฝ์— a b c ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด a์ปดํ“จํ„ฐ์™€ b์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๋น„์šฉ์ด c (1 โ‰ค c โ‰ค 10,000) ๋งŒํผ ๋“ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. a์™€ b๋Š” ๊ฐ™์„ ์ˆ˜๋„ ์žˆ๋‹ค.


์ถœ๋ ฅ

๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ๋น„์šฉ์„ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

6
9
1 2 5
1 3 4
2 3 2
2 4 7
3 4 6
3 5 11
4 5 3
4 6 8
5 6 8


์ถœ๋ ฅ

23


My Sol

import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
from heapq import heappop, heappush

def find(x):
    if not x == p[x]:
        p[x] = find(p[x])
    return p[x]

V = int(input())
E = int(input())
p = [i for i in range(V+1)]
H = []
for _ in range(E):
    u, v, w = map(int, input().split())
    heappush(H, (w, u, v))

cnt = 0
ssum = 0
while cnt < V-1 and H:
    w, u, v = heappop(H)
    a = find(u)
    b = find(v)
    if not a==b:
        p[a] = b
        cnt += 1
        ssum += w

print(ssum)

์œ ๋‹ˆ์˜จ ํŒŒ์ด๋“œ์™€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ์—์„œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ์ˆœ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋‘ ๋…ธ๋“œ์˜ ๋‘ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ชจ์•„์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ •์„์ ์œผ๋กœ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์—ฌ์„œ ๊นŒ๋‹ค๋กญ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์›Œ๋‚™ ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ์ž์ฒด์˜ ํ…œํ”Œ๋ฆฟ์ด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ