목차

행성 터널

ps
링크acmicpc.net/…
출처BOJ
문제 번호2887
문제명행성 터널
레벨플래티넘 5
분류

최소 신장 트리

시간복잡도O(nlogn)
인풋사이즈n<=100,000
사용한 언어Python
제출기록99056KB / 988ms
최고기록988ms
해결날짜2022/10/02
태그

30단계 [라이]최소 스패닝 트리

풀이

코드

"""Solution code for "BOJ 2887. 행성 터널".

- Problem link: https://www.acmicpc.net/problem/2887
- Solution link: http://www.teferi.net/ps/problems/boj/2887

Tags: [Minimum spanning tree]
"""

import itertools
import sys
from teflib import graph as tgraph


def main():
    N = int(sys.stdin.readline())
    coords = [[int(x) for x in sys.stdin.readline().split()] for i in range(N)]
    edges = []
    for k in range(3):
        # pylint: disable=cell-var-from-loop
        sorted_planets = sorted(range(N), key=lambda i: coords[i][k])
        for u, v in itertools.pairwise(sorted_planets):
            edges.append((u, v, coords[v][k] - coords[u][k]))

    mst_edges = tgraph.minimum_spanning_tree(edges, N)
    print(sum(w for u, v, w in mst_edges))


if __name__ == '__main__':
    main()