6497번: 전력난
성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들
www.acmicpc.net
📝 풀이
- m개의 집(노드)과 n개의 길(간선)으로 구성된 도시(연결 그래프)가 주어지고 해당 도시에서 가로등 일부를 소등하였을 때(일부 간선을 제거하였을 때) 절약할 수 있는 최대 액수를 구하는 프로그램
- 일부 간선을 제거한 연결 그래프에서 모든 두 노드 쌍은 서로 연결되어 왕래할 수 있어야 한다.
- 전형적인 MST 알고리즘으로 구현할 수 있다.
- 크루스칼 알고리즘, 최소 힙 자료구조 사용
💻 소스코드
import sys
input = sys.stdin.readline
def find(x):
if parent[x] == x:
return x
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a, b = find(a), find(b)
parent[max(a, b)] = min(a, b)
while True:
m, n = map(int, input().split())
if m == 0 and n == 0:
break
edges = []
parent = [i for i in range(m + 1)]
ans = 0
for i in range(n):
x, y, z = map(int, input().split())
edges.append((z, x, y))
edges.sort()
for edge in edges:
z, x, y = edge
if find(x) != find(y):
union(x, y)
else:
ans += z
print(ans)
'🥇 Problem Solving > Minimum Spanning Tree' 카테고리의 다른 글
[Python] BOJ / 1774번 / 우주신과의 교감 (0) | 2022.05.28 |
---|---|
[Python] BOJ / 17472번 / 다리 만들기 2 (0) | 2022.05.12 |
[Python] BOJ / 4386번 / 별자리 만들기 (0) | 2022.04.27 |
[Python] BOJ / 1647번 / 도시 분할 계획 (0) | 2022.04.27 |
[Python] BOJ / 1922번 / 네트워크 연결 (0) | 2022.04.15 |