만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

움얌얌

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

요약
각 룩을 코치로 바꿨을 때, 룩이 없는 행과 열의 칸만 밟으며 가장 많은 룩을 먹는 데 필요한 최소 이동 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
그래프, BFS, 정렬
정답자
아직 제출이 없습니다

문제

무한한 크기의 체스판에 NN개의 룩(Rook)이 있다. 룩은 같은 행이나 같은 열에 있는 말을 공격할 수 있다. 초기 상태에서는 어떤 룩도 다른 룩을 공격할 수 없다. 즉, 모든 룩은 서로 다른 행에 있고, 서로 다른 열에 있다.

이 중 룩 하나를 구재현 코치 말로 대체한다. 구재현 코치는 상하좌우로 인접한 셀로 움직일 수 있다. 다만 룩에 공격당하는 셀, 즉 어떤 룩과 같은 행이나 같은 열에 있는 셀로는 움직일 수 없다.

구재현 코치는 맛있는 음식을 좋아한다. 코치가 있는 셀의 8방향(상하좌우와 대각선) 인접 셀에 룩이 있으면, 코치는 그 룩의 셀로 움직여 룩을 먹는다. 룩을 먹는 것은 룩에 공격당하는 것보다 우선한다.

구재현 코치는 가능한 한 많은 룩을 먹으려고 한다. 그 방법이 여러 가지라면 움직임이 가장 적은 방법을 택한다.

각 룩에 대해, 그 룩을 구재현 코치로 대체했다고 하자. 최대한 많은 룩을 먹기 위해 구재현 코치가 움직이는 횟수의 최솟값을 출력하라.

입력

첫 번째 줄에 룩의 수 NN (2≤N≤200 0002 \le N \le 200\,000)이 주어진다. 이후 NN개의 줄에 각 룩의 좌표 Xi,YiX_i, Y_i (1≤Xi,Yi≤1061 \le X_i, Y_i \le 10^6)가 주어진다.

모든 룩은 서로 다른 행과 서로 다른 열에 있다. 즉, i≠ji \neq j이면 Xi≠XjX_i \neq X_j이고 Yi≠YjY_i \neq Y_j이다.

출력

NN개의 줄에 걸쳐 정수를 하나씩 출력하라. ii번째 줄에는 ii번째 룩을 구재현 코치로 대체했을 때, 최대한 많은 룩을 먹기 위해 구재현 코치가 움직이는 횟수의 최솟값을 출력한다.

예제2

  1. 예제 1

    입력
    6
    1 8
    6 10
    2 7
    4 4
    9 3
    5 1
    
    예상 출력
    5
    0
    7
    5
    0
    0
    
  2. 예제 2

    입력
    10
    2 5
    4 4
    13 12
    12 13
    14 17
    17 19
    22 22
    16 18
    19 27
    25 26
    
    예상 출력
    2
    2
    9
    9
    3
    3
    24
    5
    0
    25