~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/6497
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํฌ๋ฃจ์ค์นผ (์ต์ ์คํจ๋ ํธ๋ฆฌ) ์๊ณ ๋ฆฌ์ฆ
- find ํจ์ : ๋ถ๋ชจ ๋ ธ๋(์ด๋ ์งํฉ์ ์ํ๋์ง) ํ์ธ
- union ํจ์ : ์ ์ a, b๋ฅผ ๊ฐ์ ์งํฉ์ ์ํ๋๋ก parent ์ ๋ฐ์ดํธ
- ์ฌ๋ฌ ํ ์คํธ์ผ์ด์ค ์์ผ๋ฏ๋ก n, m์ด 0, 0 ์ผ๋ ์ข ๋ฃ ์กฐ๊ฑด์ผ๋ก ๋ฌดํ ๋ฐ๋ณต
- edges : ๊ฐ์ ์ ๋น์ฉ ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅ
- parent : ๊ฐ ์ ์ ์ ๋ถ๋ชจ, ์ฆ ์งํฉ์ ์ ์ฅ
- ์ ๋ ฌ๋ edges๋ฅผ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ฉฐ ์ฌ์ดํด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ฐ๊ฒฐ
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
def find(x):
if parent[x] != x:
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a = find(a)
b = find(b)
minP, maxP = min(a, b), max(a, b)
parent[maxP] = minP
while True:
m, n = map(int, input().split())
if m == 0 and n == 0:
break
edges = []
parent = [i for i in range(m)]
result = 0
for _ in range(n):
x, y, z = map(int, input().split())
edges.append((z, x, y))
result += z
edges.sort()
for w, x, y in edges:
if find(x) != find(y):
union(x, y)
result -= w
print(result)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐