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

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

플러드 필 (Flood Fill)

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

요약
M개의 점과 거리 기준 D가 주어질 때 택시 거리가 D 이하인 점들을 연결 요소로 묶고, 연결 요소의 개수와 가장 큰 연결 요소의 크기를 구한다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 정렬, 분할 정복, 기하
정답자
아직 제출이 없습니다

문제

평면 위에 MM개의 점이 놓여 있다. 두 점 (x1,y1)(x_1, y_1)과 (x2,y2)(x_2, y_2) 사이의 택시 거리(taxicab distance) 는 ∣x1−x2∣+∣y1−y2∣|x_1 - x_2| + |y_1 - y_2|로 정의된다.

두 점의 택시 거리가 DD 이하이면 두 점은 서로 직접 연결되어 있다고 한다. 직접 연결을 여러 번 거쳐 서로 도달할 수 있는 점들의 모임을 하나의 섬(island) 이라고 부른다. 즉, 섬은 '직접 연결' 관계로 만들어지는 연결 요소(connected component)이다.

주어진 점들에 대해 섬의 개수와, 가장 큰 섬에 속한 점의 개수(가장 큰 섬의 크기)를 구하여라.

D=1D = 1이면 같은 칸이거나 상하좌우로 한 칸 떨어진 점만 연결되는, 잘 알려진 Flood Fill 문제와 같다. 이 문제는 그 기준 거리를 임의의 DD로 일반화한 것이다.

입력

첫째 줄에 점의 개수 MM과 기준 거리 DD가 주어진다. (1≤M≤1000001 \le M \le 100000, 1≤D≤1091 \le D \le 10^9)

이어지는 MM개의 줄에 각 점의 좌표 XiX_i와 YiY_i가 주어진다. (1≤Xi,Yi≤1091 \le X_i, Y_i \le 10^9)

같은 좌표를 가진 점이 여러 번 주어질 수 있으며, 이 경우 두 점의 택시 거리는 00이므로 항상 같은 섬에 속한다.

출력

섬의 개수와 가장 큰 섬의 크기를 공백으로 구분하여 한 줄에 출력한다.

힌트

좌표 범위가 매우 크므로 모든 점의 쌍을 직접 비교하면 느릴 수 있다. u=x+yu = x + y, v=x−yv = x - y로 좌표를 바꾸면 택시 거리가 체비쇼프 거리 max⁡(∣u1−u2∣, ∣v1−v2∣)\max(|u_1 - u_2|,\ |v_1 - v_2|)와 같아진다. 그러면 두 점이 직접 연결될 조건은 ∣u1−u2∣≤D|u_1 - u_2| \le D 이면서 ∣v1−v2∣≤D|v_1 - v_2| \le D, 즉 변환된 좌표에서 한 변의 길이가 DD인 정사각형 안에 함께 들어가는지로 단순해진다.

예제4

  1. 예제 1

    입력
    4 2
    1 1
    3 3
    2 2
    10 10
    
    예상 출력
    2 3
    
  2. 예제 2

    입력
    2 4
    1 1
    3 3
    
    예상 출력
    1 2
    
  3. 예제 3

    입력
    2 3
    1 1
    3 3
    
    예상 출력
    2 1
    
  4. 예제 4

    입력
    5 2
    1 1
    2 2
    3 3
    100 100
    101 100
    
    예상 출력
    2 3