도로 공사

시간 제한0.5초메모리 제한1024 MB

요약
기존 경로를 따라 도로를 건설하고, 철거한 도로의 길이만큼 자원을 충당해 지름길을 놓을 때, 1번 마을에서 N번 마을까지 이동 거리의 최솟값을 구한다.
난이도

어려움10점 중 8점

유형
최소 신장 트리, 기하, 그리디, 그래프
정답자
아직 제출이 없습니다

문제

xyxy평면 위에 11번부터 NN번까지 총 NN개의 마을이 있다. ii번 마을의 좌표는 (x_i,y_i)(x\_i, y\_i)이고, 각 마을의 좌표는 서로 다르다.

두 마을 사이에는 둘만을 연결하는 도로를 지을 수 있고, 이 도로의 길이는 두 마을 사이의 유클리드 거리[1]와 같다. 처음에 jj번 마을과 j+1j+1번 마을을 연결하는 도로가 하나씩 존재한다. (1≤j≤N−1)(1 \le j \le N-1)

여러분은 초기 건설 자원이 00인 상태에서, 다음 2가지 공사를 각각 원하는 만큼 수행할 수 있다.

  • 현재 설치된 도로 중 하나를 철거한다. 이때 건설 자원이 철거한 도로의 길이만큼 늘어난다.
  • 원하는 두 마을을 연결하는 도로를 건설한다. 이때 건설 자원이 도로의 길이만큼 소모되며, 소모할 건설 자원이 부족하면 건설할 수 없다.

11번 마을에서 NN번 마을에 도착하기까지 도로만을 이용하여 이동할 때, 지나는 도로의 총 길이의 최솟값을 구하여라.

입력

첫 번째 줄에 마을의 개수 NN이 주어진다. (2≤N≤100,000)(2 \le N \le 100\\,000)

두 번째 줄부터 NN개의 줄에 걸쳐 마을의 좌표가 주어진다. 그중 ii번째 줄에는 ii번 마을의 좌표를 나타내는 정수 x_ix\_i, y_iy\_i가 공백으로 구분되어 주어진다. 각 마을의 좌표는 서로 다르다. (−109≤x_i,y_i≤109)(-10^9 \le x\_i, y\_i \le 10^9)

출력

첫 번째 줄에 11번 마을에서 NN번 마을에 도착하기까지 지나는 도로의 총 길이의 최솟값을 출력한다. 절대/상대 오차는 10−410^{-4}까지 허용한다.

힌트

[1] xyxy평면 위에서 (a,b)(a, b)와 (c,d)(c, d)의 유클리드 거리는 (a−c)2+(b−d)2\sqrt{(a-c)^2 + (b-d)^2}이다.

예제1

  1. 예제 1

    입력
    3
    -1 0
    0 0
    1 0
    
    예상 출력
    2