알고리즘 문제풀이

연애 혁명 ( 27498 백준)

wiojfe 2023. 8. 9. 18:41

 다른 문제와 다르게 MST가 안 생기도록 하는 선분만 남겨야 하니 먼저 최대 가중치의 MST를 만들고 그것을 전체에서 뺀다. 

import sys 
import heapq
input = sys.stdin.readline 
n,m = map(int, input().split())

edges =[]

ans = 0 
parent =[i for i in range(n+1)] 
def find(a):
    if a != parent[a] :
        parent[a] = find(parent[a])
    return parent[a] 

def union(a,b):
    a= find(a)
    b= find(b)
    if a<b :
        parent[b] = a 
    else :
        parent[a] = b 
con_sum = 0 
total =0 
for i in range(m):
    a,b,c,d= map(int, input().split())
    total += c
    if d == 1 :
        con_sum += c
        union(a,b)
    else:
        edges.append((c,a,b))
        
edges = sorted(edges, key = lambda x : -x[0])



cnt = 0 
ans = 0 
for cost,x,y in edges:
    if find(x) == find(y):
        continue 
    else :
        cnt += 1 
        con_sum += cost 
        union(x,y)
print(total-con_sum)