~목차~
문제
https://www.acmicpc.net/problem/21924
문제 해결 포인트
- 크루스칼 알고리즘
작성 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
parent = [i for i in range(N+1)]
edges = []
result, cnt = 0, 0
for _ in range(M):
a, b, c = map(int, input().split())
edges.append((c, a, b))
result += c
edges.sort()
def find_parent(x):
if x != parent[x]:
parent[x] = find_parent(parent[x])
return parent[x]
def union_parent(a, b):
a = find_parent(a)
b = find_parent(b)
if a < b:
parent[b] = a
else:
parent[a] = b
for w, a, b in edges:
if find_parent(a) != find_parent(b): # 사이클이 발생하지 않는다면 연결
union_parent(a, b)
result -= w
for i in range(1, N): # 연결되지 않은 정점 찾기
if i == parent[i]:
cnt += 1
if cnt > 1:
print(-1)
else:
print(result)
도움이 되셨다면 좋아요 눌러주세요💚
'📁문제 풀이 > 🧩Baekjoon' 카테고리의 다른 글
[Python] 백준 1715 카드 정렬하기 | 그리디 알고리즘 (0) | 2023.06.06 |
---|---|
[Python] 백준 1774 우주신과의 교감 | 크루스칼 알고리즘 (0) | 2023.05.29 |
[Python] 백준 19368 행성 연결 | 크루스칼 알고리즘 (0) | 2023.05.29 |
[Python] 백준 14621 나만 안되는 연애 | 크루스칼 알고리즘 (0) | 2023.05.29 |
[Python] 백준 6497 전력난 | 크루스칼 알고리즘 (0) | 2023.05.28 |