개발/algorithm
[백준 6497번] 전력난 - python / 크루스칼 알고리즘
zzi_on2
2022. 4. 26. 14:53
문제 링크
https://www.acmicpc.net/problem/6497
6497번: 전력난
성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들
www.acmicpc.net
풀이
- 크루스칼 알고리즘 사용
현재 가로등을 모두 켰을 때 드는 비용에서 모든 길을 연결하는 가로등의 최소 비용을 빼면 절약한 비용만 남게 된다.
import sys
input = sys.stdin.readline
# 부모 찾는 함수
def find(x):
if x == parent[x]:
return x
parent[x] = find(parent[x])
return parent[x]
# 합집합 함수
def union(a,b):
a = parent[a]
b = parent[b]
if a == b:
return
if a < b:
parent[b] = a
else:
parent[a] = b
while True:
m, n = map(int,input().split())
# 중단 조건
if m == 0 and n == 0 :
break
# 부모 저장 테이블
parent = [0] * m
for i in range(1,m):
parent[i] = i
edges = []
answer = 0
for _ in range(n):
a, b, c = map(int,input().split())
edges.append((c, a, b))
edges.append((c, b, a))
# 전체 가로등의 비용구하기
answer += c
edges.sort()
for edge in edges:
cost, a, b = edge
if find(a) != find(b):
union(a,b)
# 설치할 가로등 비용 빼기
answer -= cost
# 절약한 가로등 비용
print(answer)