728x90
https://www.acmicpc.net/problem/1197
1197번: 최소 스패닝 트리
첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이
www.acmicpc.net
제목 그대로 MST를 구하면 되는 문제이다.
처음에는 prim을 이용해 구현했는데 시간초과, 메모리초과가 나길래 크루스칼로 바꿔 풀었다.
import sys
input = sys.stdin.readline
def find_p(x):
if x != team[x]:
team[x] = find_p(team[x])
return team[x]
else:
return x
V, E = map(int, input().split())
team = [i for i in range(V+1)]
input_list = []
ans = 0
edge_cnt = 0
for _ in range(E):
input_list.append(list(map(int, input().split())))
input_list.sort(key=lambda x: x[2])
for n1, n2, w in input_list:
p1 = find_p(n1)
p2 = find_p(n2)
if p1 == p2:
continue
else:
team[p1] = p2
ans += w
edge_cnt += 1
if edge_cnt == V-1:
break
print(ans)
'알고리즘' 카테고리의 다른 글
[백준] 16326. 아기 상어 (0) | 2021.10.20 |
---|---|
[백준] 17619. 개구리 점프 (0) | 2021.10.19 |
[백준] 14621. 나만 안되는 연애 (0) | 2021.10.19 |
[백준] 1043. 거짓말 (0) | 2021.10.19 |
[백준] 17352. 여러분의 다리가 되어 드리겠습니다! (0) | 2021.10.17 |