[๋ฐฑ์ค] 1647 ๋์ ๋ถํ ๊ณํ (python ํ์ด์ฌ)
https://www.acmicpc.net/problem/1647
1647๋ฒ: ๋์ ๋ถํ ๊ณํ
์ฒซ์งธ ์ค์ ์ง์ ๊ฐ์ N, ๊ธธ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. N์ 2์ด์ 100,000์ดํ์ธ ์ ์์ด๊ณ , M์ 1์ด์ 1,000,000์ดํ์ธ ์ ์์ด๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ M์ค์ ๊ฑธ์ณ ๊ธธ์ ์ ๋ณด๊ฐ A B C ์ธ ๊ฐ์ ์ ์๋ก ์ฃผ์ด์ง๋๋ฐ A๋ฒ
www.acmicpc.net
๋์ด๋์ ๋นํด ๋งค์ฐ ๊ฐ๊ฒฐํ ๋ฌธ์ ๋ค.
๋์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ๋์จ ํ์ธ๋์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ค.
์์ด๋์ด
1. ๋ง์์ ๋ ๊ฐ๋ก ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ ๊ธฐ์ตํ๊ณ ์๋ค๋ฉด ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ค.
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ๋น์ฉ์ด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์๋ผ์ฃผ๋ฉด ๋๋ค.
- ์ต์ ์คํจ๋ ํธ๋ฆฌ์์๋ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๊ฐ์ ํ๋๋ง ์๋ผ์ฃผ๋ฉด ๋ ๊ฐ์ ์คํจ๋ ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋ค.
์ ์ฒด ์ฝ๋
import sys
def find_parent(x):
if parent[x] != x:
parent[x] = find_parent(parent[x])
return parent[x]
def union(a, b):
a = find_parent(a)
b = find_parent(b)
if a < b:
parent[b] = a
else:
parent[a] = b
N, M = map(int, input().split())
parent = [0] * (N + 1)
for i in range(1, N + 1):
parent[i] = i
graph = []
for _ in range(M):
graph.append([int(x) for x in sys.stdin.readline().rstrip().split()])
graph.sort(key= lambda x:x[2])
result = 0
max_cost = 0
for edge in graph:
start, end, cost = edge
if find_parent(start) != find_parent(end):
union(start, end)
result += cost
max_cost = max(cost, max_cost)
print(result - max_cost)
์ฝ๋ ์ค๋ช
def find_parent(x):
if parent[x] != x:
parent[x] = find_parent(parent[x])
return parent[x]
def union(a, b):
a = find_parent(a)
b = find_parent(b)
if a < b:
parent[b] = a
else:
parent[a] = b
์ ๋์จ ํ์ธ๋์ ๋ํ ๋ด์ฉ์ด๋ค.
์ด ๋ถ๋ถ์ ๋ํ ์ค๋ช ์ ๋์ด๊ฐ๊ฒ ๋ค.
graph.sort(key= lambda x:x[2])
result = 0
max_cost = 0
for edge in graph:
start, end, cost = edge
if find_parent(start) != find_parent(end):
union(start, end)
result += cost
max_cost = max(cost, max_cost)
print(result - max_cost)
๊ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ทธ๋ํ ๋ฆฌ์คํธ๋ฅผ ๋น์ฉ ์์ผ๋ก ์ ๋ ฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ฐ์ ์ ํ๋์ฉ ํ์ธํด๊ฐ๋ฉด์
์ฌ์ดํด์ด ์๊ธฐ๋์ง ์ ์๊ธฐ๋์ง ํ์ธํด์ค๋ค.
์ฌ์ดํด์ด ์ ์๊ธฐ๋ฉด ์งํฉ์ ํฌํจํด์ฃผ๊ณ ๋น์ฉ์ ์ ๋ฐ์ดํธํด์ค๋ค.
์ดํ ์ต์ ์คํจ๋ ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ฉด ์ฌ๊ธฐ์ ๋น์ฉ์ด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์ง์์ผ ํ๋ฏ๋ก
๋ฏธ๋ฆฌ ์ ์ฅํด๋ max_cost๊ฐ์ ๋นผ์ค๋ค.