Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 1197] 최소 스패닝 트리 (Python3) 본문

Problem Solving

[BOJ 1197] 최소 스패닝 트리 (Python3)

흑개 2021. 10. 16. 17:14

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

import heapq

q=[]
V, E=map(int, input().split())
parents=[0]
cnt=0
ans=0

def find(a):
    if parents[a]==a:
        return a
    parents[a]=find(parents[a])
    return parents[a]

def union(a, b):
    pa=find(a)
    pb=find(b)
    if pa!=pb:
        parents[pa]=pb

for i in range(E):
    A,B,C=map(int, input().split())
    heapq.heappush(q, (C,A,B))
for i in range(1,V+1):
    parents.append(i)

while True:
    if cnt==V-1:
        break
    e=heapq.heappop(q)
    pa=find(e[1])
    pb=find(e[2])
    if pa!=pb:
        union(pa,pb)
        cnt+=1
        ans+=e[0]

print(ans)

확실히 Python이 코드는 간단하나 시간이 오래 걸린다..

게다가 우선순위 큐 라이브러리인 PriorityQueue는 "동기화" 기능이 있어서 속도가 느리다.

그때는 heapq를 써주면 된다.

 

크루스칼 알고리즘으로 MST 를 구현하는 문제.