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

Updated:

1647번 : 도시 분할 계획


마을을 두 마을로 나누면서 최소한의 비용으로 유지하고 싶다면 우선 하나의 MST 를 만든 뒤 가장 비용이 비싼 길 하나를 지우면 된다.

그렇게 되면 마찬가지로 최소한의 비용으로 유지하는 두 마을을 만들 수 있다.


import sys


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

	return parent[node]


def union_parent(parent, a, b):
	a = find_parent(parent, a)
	b = find_parent(parent, b)

	if a < b:
		parent[b] = a
	else:
		parent[a] = b


def solution():
	answer = 0
	parent = [i for i in range(node_cnt + 1)]
	edges.sort()

	for edge in edges:
		cost, start, end = edge
		if find_parent(parent, start) != find_parent(parent, end):
			union_parent(parent, start, end)
			answer.append(cost)

	return sum(answer[:-1])


if __name__ == "__main__":
	node_cnt, edge_cnt = map(int, input().split())
	edges = []
	for _ in range(edge_cnt):
		start, end, cost = map(int, sys.stdin.readline().rsplit())
		edges.append((cost, start, end))

	print(solution())



Categories:

Updated:

Leave a comment