문제 출처 : www.acmicpc.net/problem/1647
문제 해석 : 마을을 두개로 분할 하려고 한다. 이때 마을 내부에 있는 길의 Cost가 최소가 되도록 마을을 분할 해야한다.
문제 풀이 : 최소 신장트리를 이용해서 마을 전체를 순회하는 도로를 구성한 다음 가장 큰 비용을 가진 길 하나를 제거하면 각자 모든 원소를 포함하는 2개의 마을 도로가 생성된다.
풀이 코드
import sys
input = sys.stdin.readline
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def make_union(parent, a, b):
a = parent[a]
b = parent[b]
if a < b:
parent[b] = a
else:
parent[a] = b
N, M = map(int, input().split())
answer = 0
Q = []
parent = [0] * (N + 1)
for i in range(1, N+1):
parent[i] = i
for _ in range(M):
a, b, c = map(int, input().split())
Q.append([c,a,b])
Q.sort()
last = 0
for element in Q:
cost, start, end = element
if find_parent(parent, start) != find_parent(parent, end):
make_union(parent, start, end)
answer += cost
last = cost
print(answer - last)
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 2056 작업 문제 풀이 (0) | 2021.03.12 |
---|---|
[알고리즘][Python] 백준 1987 알파벳 문제 풀이 (0) | 2021.03.11 |
[알고리즘][Python] 백준 12852 1로 만들기 2 문제 풀이 (0) | 2021.03.10 |
[알고리즘][Python] 백준 1644 소수의 연속 합 문제 풀이 (0) | 2021.03.10 |
[알고리즘][Python] 백준 13164 행복 유치원 문제 풀이 (0) | 2021.03.10 |