[백준] 1647번 도시 분할 계획

JaeYeop·2022년 5월 3일
0

백준

목록 보기
16/19

[문제]

https://www.acmicpc.net/problem/1647

[코드]

import sys
input = sys.stdin.readline

def find_parent(parent, x):
    if parent[x] != x:
        parent[x] = find_parent(parent, parent[x])
    return parent[x]

def union_parent(parent, x, y):
    a = find_parent(parent, x)
    b = find_parent(parent, y)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b

n, m = map(int, input().split())
graph = []
for i in range(m):
    a, b, c = map(int, input().split())
    graph.append([c, a, b])
parent = []
for i in range(n + 1):
    parent.append(i)


graph.sort()
result = []
for i in graph:
    if find_parent(parent, i[1]) != find_parent(parent, i[2]):
        union_parent(parent, i[1], i[2])
        result.append(i[0])

print(sum(result[:-1]))

[풀이]

크루스칼 알고리즘을 이용해 최소 신장 트리를 구한다. 그리고 두 마을로 나누기 위해 비용이 가장 많이 드는 간선을 제외하고 결과를 구한다

profile
이게 왜 틀리지... (나의 메모용 블로그)

0개의 댓글