반응형
백준 1922번 문제입니다. (solved.ac)기준 골드 4 문제입니다.
https://www.acmicpc.net/problem/1922
1922번: 네트워크 연결이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.www.acmicpc.net
문제 접근
모든 컴퓨터가 연결되어 있어야하고 최소 비용으로 모든 컴퓨터를 연결하기를 원한다고 합니다.단, a에서 b를 연결하는 선이 있고, b와 c를 연결하는 선이 있다면 a와 c가 연결된다고 합니다. ex) a - b - c최소 신장 트리를 구하는 간단한 문제입니다. 저는 크루스칼 알고리즘을 통하여 구현해보았습니다.크루스칼 알고리즘은 아래 링크에 설명되어있습니다.
2022.03.06 - [정보[Information]] - 신장 트리(Spanning Tree) / 크루스칼 알고리즘(Kruskal Algorithm)(Python - 파이썬)
신장 트리(Spanning Tree) / 크루스칼 알고리즘(Kruskal Algorithm)(Python - 파이썬)서로소 집합 자료구조, 합집합-찾기 자료구조 개념이 필요하기 때문에 잘 모른다면 아래에서 읽어보고 오는 것이 좋다. 2022.03.05 - [정보[Information]] - 서로소 집합 자료구조(Union-Find)(Python-파이썬)soopeach.tistory.com
정답 코드
import sys
input = sys.stdin.readline
def findParent(parent, x) :
if parent[x] != x :
parent[x] = findParent(parent, parent[x])
return parent[x]
def unionParent(parent, a, b) :
a = findParent(parent, a)
b = findParent(parent, b)
if a < b :
parent[b] = a
else :
parent[a] = b
n = int(input())
m = int(input())
result = 0
parent = [0] * (n+1)
for i in range(n+1):
parent[i] = i
line = []
for _ in range(m) :
a, b, cost = map(int, input().split())
line.append((cost, a, b))
line.sort()
for check in line :
cost, a, b = check
if findParent(parent, a) != findParent(parent, b):
unionParent(parent, a, b)
result += cost
print(result)
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
백준 7568번 덩치(Kotlin - 코틀린) (0) | 2022.04.20 |
---|---|
[백준] 4386번 별자리 만들기(크루스칼 알고리즘)(Python - 파이썬) (0) | 2022.03.11 |
[백준] 1717번 집합의 표현(서로소 집합 자료구조)(Union-Find)(Python-파이썬) (0) | 2022.03.08 |
[백준] 1238번 파티(다익스트라 알고리즘)(Python - 파이썬) (0) | 2022.03.01 |
[백준] 4485번 녹색 옷 입은 애가 젤다지?(다익스트라 알고리즘)(Python - 파이썬) (0) | 2022.02.28 |
최근댓글