https://www.acmicpc.net/problem/1647
๋์ด๋์ ๋นํด ๋งค์ฐ ๊ฐ๊ฒฐํ ๋ฌธ์ ๋ค.
๋์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ๋์จ ํ์ธ๋์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ค.
์์ด๋์ด
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๊ฐ์ ๋นผ์ค๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]11660 ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (python ํ์ด์ฌ) (0) | 2022.08.19 |
---|---|
[๋ฐฑ์ค] 10942 ํฐ๋ฆฐ๋๋กฌ? (python ํ์ด์ฌ) (0) | 2022.08.17 |
[๋ฐฑ์ค] 1644 ์์์ ์ฐ์ํฉ (python ํ์ด์ฌ) (0) | 2022.07.31 |
[๋ฐฑ์ค] 9466 ํ ํ๋ก์ ํธ (python ํ์ด์ฌ) (0) | 2022.07.31 |
[๋ฐฑ์ค] 1806 ๋ถ๋ถํฉ (python ํ์ด์ฌ) (0) | 2022.07.29 |