아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

떠 있는 섬

시간 제한8초메모리 제한512 MB

요약
위치 p와 차수 상한 d가 있는 모든 섬을 위치 차이 비용의 다리로 가장 싸게 연결하고 불가능하면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 최소 신장 트리, 정렬
정답자
아직 제출이 없습니다

문제

작은 나라에 막 도착했다. 며칠 전 거대한 허리케인이 이 나라를 휩쓸고 지나갔다.

이 나라는 11번부터 nn번까지 번호가 붙은 섬 nn개로 이루어져 있다. 예전에는 많은 다리가 섬을 이어 주었지만, 홍수에 다리가 모두 떠내려갔다. 주민이 다시 섬 사이를 오가려면 새 다리가 필요하다.

문제는 비용이다. 나라 살림이 넉넉하지 않아 정부는 지출을 줄여야 한다. 정부는 뛰어난 프로그래머인 당신에게 다리를 다시 놓는 최소 비용을 계산해 달라고 부탁했다.

다리 하나는 섬 두 개를 양방향으로 잇는다. 섬 ii에는 두 값 pip_i와 did_i가 주어진다. 섬 ii에 연결할 수 있는 다리는 최대 did_i개다. 섬 ii와 섬 jj를 잇는 다리를 놓는 비용은 ∣pi−pj∣|p_i - p_j|다. 어느 두 섬 사이든 다리를 따라 오갈 수 있어야 하는데, 주어진 제한 안에서는 그런 배치가 아예 불가능할 때도 있다.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 데이터 집합은 최대 6060개다. 각 데이터 집합의 형식은 다음과 같다.

n
p_1 d_1
p_2 d_2
...
p_n d_n

입력의 값은 모두 정수다. 첫 줄의 nn (2≤n≤40002 \le n \le 4000)은 섬의 개수다. 이어지는 nn개의 줄에는 각 섬의 값이 주어지며, pip_i (1≤pi≤1091 \le p_i \le 10^9)와 did_i (1≤di≤n1 \le d_i \le n)는 섬 ii의 두 값이다.

입력의 끝은 00 하나만 있는 줄로 나타낸다.

출력

각 데이터 집합마다, 주어진 제한 안에서 다리를 다시 놓을 수 있으면 최소 비용을 한 줄에 출력한다. 불가능하면 −1-1을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    4
    1 1
    8 2
    9 1
    14 2
    4
    181 4
    815 4
    634 4
    370 4
    4
    52 1
    40 1
    81 2
    73 1
    10
    330 1
    665 3
    260 1
    287 2
    196 3
    243 1
    815 1
    287 3
    330 1
    473 4
    0
    
    예상 출력
    18
    634
    -1
    916
    
  2. 예제 2

    입력
    2
    1 1
    1000000000 1
    2
    1000000000 2
    1 2
    0
    
    예상 출력
    999999999
    999999999