기본 최소 스패닝 트리 크루스칼 알고리즘의 종료조건을 바꾸면
될것같은 막연한 생각이 드는중 -> 그건 아니였고
최소 스패닝 트리 find union 공식 그대로 사용 후 최대 가중치 간선 하나만 없애면 되는 거였음..
종료조건 N-2 로 하면 안되는 이유는 스패닝 트리 완성이 안된채로 끝내버리는 거라 제거해야할 간선을 택할 수 없음.
핵심 포인트
활용 방법
import sys
input=sys.stdin.readline
def find(x):
if parent[x]!=x:
parent[x]=find(parent[x])
return parent[x]
def union(a,b):
a,b=find(a),find(b)
if a<b:
parent[b]=a
else:
parent[a]=b
V,E=map(int,input().strip().split())
edges= sorted([tuple(map(int,input().strip().split())) for _ in range(E)], key=lambda x:x[2])
parent=list(range(V+1))
mst_weight=0
max_weight=0
edge_count=0
for a,b,weight in edges:
if find(a)!=find(b):
union(a,b)
mst_weight+=weight
max_weight = max(weight,max_weight)
edge_count+=1
if edge_count==V-1:
break
print(mst_weight-max_weight)