728x90
https://www.acmicpc.net/problem/1197
해당 문제는 Union, Find 문제로 최소 신장 트리를 구하는 문제이다. 간선의 개수를 입력받고, 간선을 짧은순으로 정렬한뒤 순서대로 정점을 Union 하는데, 사이클이 생기지 않게 Find로 부모를 확인한뒤 Union 하면된다.
V, E = map(int, input().split())
parent = [v1 for v1 in range(V+1)] # 정점의 개수만큼 생성
def find(v1):
if v1 !=parent[v1]:
parent[v1] = find(parent[v1])
return parent[v1]
def union(a, b):
a = find(a)
b = find(b)
# 작은 루트 노드를 기준으로 합침
if b < a:
parent[a] = b
else:
parent[b] = a
graph = []
for _ in range(E): # 간선의 개수
a, b ,c = map(int, input().split())
graph.append([c, a, b])
graph.sort()
result = 0
for cost, a , b in graph:
if find(a) != find(b):
union(a, b)
result += cost
print(result)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11437번 : LCA (0) | 2023.08.03 |
---|---|
[백준] 2263번 : 트리의 순회 (0) | 2023.08.01 |
[백준] 17472번 : 다리 만들기 2 (0) | 2023.07.31 |
[백준] 1011번 : Fly me to the Alpha Centauri (0) | 2023.07.30 |
[백준] 2573번 : 빙산 (0) | 2023.07.30 |