반응형
1. 문제
https://www.acmicpc.net/problem/1922
2. 풀이
크루스칼 알고리즘의 풀이:
1. 간선을 cost 기준으로 오름차순(작->큰) 정렬
2. 연결이 안되어있으면 union + weight추가
3. 간선 v-1개가 연결되면 종료 (이번 문제에선 3번 제외)
3. 구현
import sys
import heapq
# sys.stdin = open("input.txt")
n = int(sys.stdin.readline())
edge = int(sys.stdin.readline())
edges=[]
parent=[i for i in range(n+2)]
def find(x, parent):
if parent[x]==x:
return x
parent[x] = find(parent[x], parent)
return parent[x]
def uni(x,y, parent):
x = find(x, parent)
y = find(y, parent)
if x==y:
return
else:
parent[x]=y
return
while edge:
s,e,w = map(int, sys.stdin.readline().split())
heapq.heappush(edges, (w,s,e))
edge-=1
answer=0
while edges:
w,s,e = heapq.heappop(edges)
# print(w,s,e)
if find(s,parent) != find(e,parent):
uni(s,e,parent)
answer+=w
print(answer)
반응형
'PS > 백준' 카테고리의 다른 글
[미완] 백준 9373 복도뚫기: 크루스칼 (python, 파이썬) (0) | 2021.07.05 |
---|---|
[백준 2887] 행성 터널: 크루스칼 (python, 파이썬) (0) | 2021.07.04 |
[백준 4386] 별자리 만들기: 크루스칼 파이썬, python (0) | 2021.07.03 |
[백준 1647] 도시 분할 계획: 크루스칼 (python, 파이썬) (0) | 2021.07.03 |
백준 6497번 : 전력난, 50% 에서 런타임 에러나는 경우 (python, 파이썬) (0) | 2021.07.03 |
댓글