알고리즘 문제 풀이/이코테

[이코테] CH10 그래프 이론 실전문제 43번 어두운 길

파란색 가운 2024. 1. 24. 18:07
import sys
# sys.stdin.readline()
from collections import deque
sys.setrecursionlimit(100000000)
import heapq
import copy
import itertools
from itertools import combinations
from itertools import permutations
INF = 1e9
def find_parent(parent,x):
    if parent[x]!=x:
        parent[x] = find_parent(parent,parent[x])
    return parent[x]
def union_parent(parent,a,b):
    a = find_parent(parent,a)
    b = find_parent(parent,b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b

N,M = map(int,sys.stdin.readline().split())
edges = []
sum = 0
for _ in range(M):
    a,b,cost = map(int,sys.stdin.readline().split())
    edges.append((cost,a,b))
    sum += cost
edges.sort()
result = 0
parent = [0] * (N)
for i in range(N):
    parent[i] = i 
for edge in edges:
    cost,a,b = edge
    if find_parent(parent,a)!= find_parent(parent,b):
        union_parent(parent,a,b)
        result += cost
print(sum - result)

보자마자 딱 떠올랐다

전체 cost에서 최소신장트리 cost를 빼주면 최대로 절약한 금액이 나온다는 것을

쉽게 해결해서 기쁘다