๐ 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๋ ๊ฐ์ ์๋ ์๋ค.
์ถ๋ ฅ
๋ชจ๋ ์ปดํจํฐ๋ฅผ ์ฐ๊ฒฐํ๋๋ฐ ํ์ํ ์ต์๋น์ฉ์ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
๐ง ํ์ด
union find๋ฅผ ์ฌ์ฉํด์ ํ์๋ค.
def find(x):
if x == parent[x]:
return x
parent[x]=find(parent[x])
return parent[x]
def union(x,y):
x = find(x)
y = find(y)
if x < y :
parent[y] = x
else :
parent[x] = y
N = int(input())
M = int(input())
arr = []
res = 0
parent =[i for i in range(N+1)]
for i in range(M) :
a, b, c = map(int, input().split())
arr.append((c, a, b))
arr.sort()
for i in arr :
c, a, b = i
if find(a) != find(b) :
union(a, b)
res += c
print(res)