๐ ๋ฌธ์ ์ค๋ช
- ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ๊ทธ ๊ทธ๋ํ์ ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ต์ ์คํจ๋ ํธ๋ฆฌ๋, ์ฃผ์ด์ง ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๋ ๋ถ๋ถ ๊ทธ๋ํ ์ค์์ ๊ทธ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ธ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
์
๋ ฅ
- ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V(1 โค V โค 10,000)์ ๊ฐ์ ์ ๊ฐ์ E(1 โค E โค 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ E๊ฐ์ ์ค์๋ ๊ฐ ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ธ ์ ์ A, B, C๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ A๋ฒ ์ ์ ๊ณผ B๋ฒ ์ ์ ์ด ๊ฐ์ค์น C์ธ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์๋ฏธ์ด๋ค. C๋ ์์์ผ ์๋ ์์ผ๋ฉฐ, ์ ๋๊ฐ์ด 1,000,000์ ๋์ง ์๋๋ค.
- ๊ทธ๋ํ์ ์ ์ ์ 1๋ฒ๋ถํฐ V๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , ์์์ ๋ ์ ์ ์ฌ์ด์ ๊ฒฝ๋ก๊ฐ ์๋ค.
- ์ต์ ์คํจ๋ ํธ๋ฆฌ์ ๊ฐ์ค์น๊ฐ -2,147,483,648๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 2,147,483,647๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ง ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ต์ ์คํจ๋ ํธ๋ฆฌ์ ๊ฐ์ค์น๋ฅผ ์ถ๋ ฅํ๋ค.
๐ก ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด
- ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ๋ชจ๋ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
- ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๊ฐ์ ๋ถํฐ ์งํฉ์ ํฌํจ์ํต๋๋ค.
- ์ฌ์ดํด์ ๋ฐ์์ํฌ ์ ์๋ ๊ฐ์ ์ ๊ฒฝ์ฐ ์งํฉ์ ํฌํจ์ํค์ง ์์ต๋๋ค.

๐งโ๐ป ์ฝ๋ ํ์ด
find-parent
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
- ๋ถ๋ชจ๋
ธ๋๋ฅผ ์ฐพ์์ฃผ๋ ๋ก์ง์
๋๋ค.
union-parent
def union_parent(parent, x, y):
a = find_parent(parent, x)
b = find_parent(parent, y)
if a != b:
parent[b] = a
- ๋ถ๋ชจ๋
ธ๋๋ฅผ ์๋ก ๋ณํฉํด์ฃผ๋ ๋ก์ง์
๋๋ค.
parent = [i for i in range(n + 1)]
arr = []
for i in range(m):
x, y, cost = map(int, sys.stdin.readline().split())
arr.append([cost, x, y])
arr.sort()
- ์
๋ ฅ๊ฐ์ ์ฒ๋ฆฌํด์ฃผ๊ณ ๋ฐฐ์ด์ ๊ฐ์ ํ ๋นํด์ค๋๋ค.
cost๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ค๋๋ค.
์ต์ ๊ฐ์ค์น ์ฐพ๊ธฐ
answer = 0
for cost, x, y in arr:
if find_parent(parent, x) != find_parent(parent, y) :
union_parent(parent, x, y)
answer += cost
print(answer)
- ๋ถ๋ชจ๊ฐ ๊ฐ์ง ์์๋ ๋ถ๋ชจ๋ฅผ ๋ณํฉํด์ค๋๋ค.
- ๋ถ๋ชจ๊ฐ ๋ณํฉ๋ ๋ ๊ฐ์ค์น๋ฅผ ์ง์์ ์ผ๋ก
answer ์ ๋ํด์ค๋๋ค.
- ๋ง์ง๋ง์ผ๋ก
answer ๋ฅผ ์ถ๋ ฅํด์ค๋๋ค.