[BOJ][๐ก4][๋ฐฑ์ค#01922] ๋คํธ์ํฌ ์ฐ๊ฒฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ํ์ด๋ ์ปดํจํฐ์ ์ปดํจํฐ๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐํ๋ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๋ ค ํ๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ ํ๋ธ๊ฐ ์์ง ์์ ์ปดํจํฐ์ ์ปดํจํฐ๋ฅผ ์ง์ ์ฐ๊ฒฐํ์ฌ์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ชจ๋๊ฐ ์๋ฃ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด์๋ ๋ชจ๋ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ์ด ๋์ด ์์ด์ผ ํ๋ค. (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)
์ ๋์จ ํ์ด๋์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ํธ๋ ๋ฐฉ์์ด๋ค. ์ต์์ ์ฅํธ๋ฆฌ์์ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์์ ์์ผ๋ก ์ฐ๊ฒฐ๋ ๋ ๋ ธ๋์ ๋ ๋ฃจํธ ๋ ธ๋๊ฐ ๊ฐ์์ง ์๋์ง๋ฅผ ํ๋จํ์ฌ ๋ชจ์์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ ์์ ์ผ๋ก ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ๋๋ ๋ฌธ์ ์ฌ์ ๊น๋ค๋กญ์ง๋ ์์์ง๋ง ์๋ ์ ๋์จ ํ์ธ๋ ์์ฒด์ ํ ํ๋ฆฟ์ด ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ์ดํด๊ฐ ํ์ํ ๋ถ๋ถ์ด๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ