~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1647
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ์ต์ ์คํจ๋ ํธ๋ฆฌ ๋ฌธ์ (ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ)
- edges : ๊ฐ์ ๋น์ฉ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅํ ๋ฆฌ์คํธ
- parent : ์๋ก์ ์งํฉ ์ ๋ณด ์ ์ฅํ ๋ฆฌ์คํธ
- find_parent(x) : ์๋ก ๊ฐ์ ์งํฉ์ ์ํด์๋์ง ํ์ธํ๋ ํจ์
- union_parent(a, b) : a, b ์ ์ ์ ๋ํด ๊ฐ์ ์งํฉ์ ์ํ๋๋ก parent ์์
-์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ edges๋ฅผ ํ๋์ฉ ๋ฐฉ๋ฌธํ๋ฉฐ ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด( find(a) != find(b) ) ์ฐ๊ฒฐ
- ์ค๋ฆ์ฐจ์์์ ๋ง์ง๋ง์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฐ์ ๋น์ฉ(last)์ ๋ชจ๋ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋น์ฉ์์ ๋นผ๋ฉด ๊ฒฐ๊ณผ
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
edges = []
parent = [i for i in range(N+1)]
def find_parent(x):
if parent[x] != x:
parent[x] = find_parent(parent[x])
return parent[x]
def union_parent(a, b):
a = find_parent(a)
b = find_parent(b)
if a < b:
parent[b] = a
else:
parent[a] = b
for _ in range(M):
a, b, c = map(int, input().split())
edges.append((c, a, b))
edges.sort()
result = 0
last = 0
for w, a, b in edges:
if find_parent(a) != find_parent(b):
union_parent(a, b)
result += w
last = w
print(result-last)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 4386 ๋ณ์๋ฆฌ ๋ง๋ค๊ธฐ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
---|---|
[Python] ๋ฐฑ์ค 1922 ๋คํธ์ํฌ ์ฐ๊ฒฐ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
[Python] ๋ฐฑ์ค 1197 ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2023.05.23 |
[Python] ๋ฐฑ์ค 18405 ๊ฒฝ์์ ์ ์ผ | BFS (0) | 2023.05.20 |
[Python] ๋ฐฑ์ค 14502 ์ฐ๊ตฌ์ | BFS (0) | 2023.05.20 |