백준 1991번 python 풀이 - 최소 스패닝 트리
문제 링크
해결책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import sys
def get_Parent(val):
if parent_list[val] == val:
return val
parent_list[val] = get_Parent(parent_list[val])
return parent_list[val]
def union_parent(a, b):
a = get_Parent(a)
b = get_Parent(b)
if a < b:
parent_list[b] = a
else:
parent_list[a] = b
V, E = map(int, sys.stdin.readline().rstrip().split())
weight_list = []
parent_list = []
for i in range(V):
parent_list.append(i)
for i in range(E):
_from, _to, _weight = map(int, sys.stdin.readline().rstrip().split())
_from -= 1
_to -= 1
weight_list.append([_weight, _from, _to])
weight_list.sort()
_sum = 0
for weight in weight_list:
if get_Parent(weight[1]) != get_Parent(weight[2]):
union_parent(weight[1], weight[2])
_sum += weight[0]
print(_sum)
주석으로 달 설명
크루스칼 알고리즘을 이용한 풀이이다. 자세한 크루스칼 알고리즘의 대한 해설은 링크를 통해 작성해두었다.
This post is licensed under CC BY 4.0 by the author.