~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1197
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ๋ฌธ์ ์ด๋ฆ์์ ์ ์ ์๋ฏ ์ต์ ์คํจ๋ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ๋๋ค.
- parent : ์๋ก์ ์งํฉ ๊ฐ๋ ์์ ๊ฐ ์ ์ ์ด ์ด๋ ์งํฉ์ ์ํด์๋์ง ์ ๋ณด๋ฅผ ์ ์ฅ
- edges : ๊ฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ. ๊ฐ์ฅ ์์ ๋น์ฉ์ด ๋ฐ์ํ๋ ๊ฐ์ ๋ถํฐ ์ฐ๊ฒฐํด๋๊ฐ๋ค
- find_parent : ํด๋นํ๋ ์ ์ ์ ๋ถ๋ชจ(์งํฉ)์ ์ฐพ์์ฃผ๋ ํจ์
- union_parent : ๋ ์ ์ ์ ๋ํด์ ๊ฐ์ ๋ถ๋ชจ(์งํฉ)์ ์ํ ์ ์๋๋ก ์ฐ์ฐ. ๋ ์์ ๊ฐ์ด ๋ถ๋ชจ๊ฐ ๋๋ค.
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
V, E = map(int, input().split())
edges = [] # ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด์ ๊ณต๊ฐ
for i in range(E):
a, b, w = map(int, input().split())
edges.append((w, a, b)) # '๊ฐ์ ๋น์ฉ' ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํด (๋น์ฉ, ์ ์ , ์ ์ ) ํํ๋ก ์ ์ฅ
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
parent = [i for i in range(V+1)] # ์๊ธฐ ์์ ์ ๋ถ๋ชจ๋ก ๊ฐ๋ ์๋ก์ ์งํฉ
edges.sort() # ๊ฐ์ ๋น์ฉ ๊ธฐ์ค ์ฌ๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
result = 0
for w, a, b in edges:
if find_parent(a) != find_parent(b): # ์ฌ์ดํด์ด ์๊ธฐ์ง ์๋๋ค๋ฉด
union_parent(a, b) # ๊ฐ์ ์ฐ๊ฒฐ
result += w # ๋น์ฉ ๊ณ์ฐ
print(result)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
REFERENCE
<์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉํ ์ด์ค๋ค with Python>
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1922 ๋คํธ์ํฌ ์ฐ๊ฒฐ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
---|---|
[Python] ๋ฐฑ์ค 1647 ๋์ ๋ถํ ๊ณํ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
[Python] ๋ฐฑ์ค 18405 ๊ฒฝ์์ ์ ์ผ | BFS (0) | 2023.05.20 |
[Python] ๋ฐฑ์ค 14502 ์ฐ๊ตฌ์ | BFS (0) | 2023.05.20 |
[Python] ๋ฐฑ์ค 4485 ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? | ๋ค์ต์คํธ๋ผ (0) | 2023.05.18 |