사과 농장

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

요약
K명이 각각 직각 단순 다각형 영역을 정해 두었다. 한 칸을 요구한 사람들이 모두 같은 지인 묶음에 속하면 사과를 나눠 가지고, 아니면 아무도 가져가지 못한다. 한 사람이 얻는 최대 사과 수를 구한다.
난이도

어려움10점 중 8점

유형
기하, 유니온 파인드, 구현, 누적 합
정답자
아직 제출이 없습니다

문제

홍익이는 사과 농장을 가지고 있다. 농장은 가로, 세로의 길이가 각각 MM, NN인 직사각형 모양이며, 왼쪽 아래 꼭짓점의 좌표는 (0,0)(0, 0), 오른쪽 위 꼭짓점의 좌표는 (M,N)(M, N)이다. 농장은 한 변의 길이가 11인 정사각형 칸들로 구분되어 있으며, 오른쪽 위 꼭짓점의 좌표가 (x,y)(x, y)인 칸에는 사과 A_x,yA\_{x, y}개가 열려 있다.

홍익이는 '널리 이롭게 한다'는 홍익 정신을 실천하기 위해 자신의 사과 농장을 개방하여 다른 사람들이 수확할 수 있도록 했다. KK명의 사람들이 모였고, 각 사람은 자신이 수확할 영역을 미리 정해 놓은 상태이다. ii번째 사람이 정한 영역은 R_iR\_i개의 정수 좌표 꼭짓점들로 이루어진 단순 직각 다각형 모양이다. 즉, 다각형의 각 변은 xx축 또는 yy축에 평행하며, 다각형의 두 선분은 연속하는 선분의 꼭짓점을 제외하고는 만나지 않는다. 이때, 서로 다른 사람이 정한 영역끼리는 겹칠 수 있다.

모인 사람들 중에는 지인과 함께 온 사람들도 있는데, 이 사람들은 지인의 지인까지도 모두 알고 있다. 구체적으로, 두 사람 XX와 YY가 서로 지인 관계이고 YY와 ZZ가 서로 지인 관계이면 XX와 ZZ도 항상 서로 지인 관계이다.

홍익이는 사람들이 무질서하게 수확하는 것을 방지하기 위해 다음과 같은 규칙을 세웠다.

  • 어떤 칸을 수확하려는 사람이 11명인 경우: 그 사람이 해당 칸의 사과를 모두 갖는다.
  • 어떤 칸을 수확하려는 사람이 22명 이상인 경우: 해당 칸에 열려 있는 사과의 개수를 cc, 해당 칸을 수확하려는 사람의 수를 nn이라고 하자. 그 사람들이 모두 서로 지인 관계라면 각자 ⌊cn⌋\lfloor \frac{c}{n} \rfloor 만큼씩 사과를 나눠 갖는다. 그렇지 않다면 아무도 그 칸에서 사과를 가져가지 않는다.

위와 같은 규칙 아래에서 사람들이 수확을 할 때, 가장 많은 사과를 수확하는 사람은 몇 개의 사과를 갖게 되는지 구해보자.

입력

첫째 줄에 NN, MM이 공백으로 구분되어 주어진다. (1≤N,M≤1 0001 \le N, M \le 1\ 000)

다음 NN개의 줄에 걸쳐 각 칸마다 열린 사과의 수가 주어진다. ii번째 줄에는 MM개의 정수 A_1,i,A_2,i,⋯ ,A_M,iA\_{1,i}, A\_{2,i}, \cdots, A\_{M,i}가 공백으로 구분되어 주어진다. (0≤A_x,y≤1090 \le A\_{x,y} \le 10^9)

다음 줄에 KK가 주어진다. (1≤K≤1 0001 \le K \le 1\ 000)

다음 KK개의 줄에 걸쳐 각 사람이 정한 수확 영역의 꼭짓점들의 좌표가 주어진다. ii번째 줄에는 1+2R_i1+2R\_i개의 정수 R_i,x_i,1,y_i,1,x_i,2,y_i,2,⋯ ,x_i,R_i,y_i,R_iR\_i, x\_{i,1}, y\_{i,1}, x\_{i,2}, y\_{i,2}, \cdots, x\_{i,R\_i}, y\_{i,R\_i}가 공백으로 구분되어 주어진다. 1≤j<R_i1 \le j \lt R\_i인 정수 jj에 대해 두 꼭짓점 (x_i,j,y_i,j)(x\_{i,j}, y\_{i,j})와 (x_i,j+1,y_i,j+1)(x\_{i,j+1}, y\_{i,j+1})을 잇는 선분이 존재하며, (x_i,R_i,y_i,R_i)(x\_{i,R\_i}, y\_{i,R\_i})와 (x_i,1,y_i,1)(x\_{i,1}, y\_{i,1})를 잇는 선분이 존재한다. 가로 선분이 연속되거나 세로 선분이 연속되는 경우는 주어지지 않으며, 각 수확 영역의 둘레의 길이는 2(M+N)2(M+N)을 넘지 않는다. (0≤x_i,j≤M,0≤y_i,j≤N0 \le x\_{i, j} \le M, 0 \le y\_{i,j } \le N)

다음 줄에 지인 관계의 수 PP가 주어진다. (0≤P≤K(K−1)20 \le P \le \displaystyle\frac{K(K-1)}{2})

다음 PP개의 줄에 걸쳐 각 지인 관계 정보가 주어진다. ii번째 줄에는 두 정수 p_i,q_ip\_i, q\_i가 공백으로 구분되어 주어진다. p_ip\_i번째 사람과 q_iq\_i번째 사람이 서로 지인임을 의미한다. 같은 관계가 두 번 이상 주어지지 않는다. (1≤p_i<q_i≤K1 \le p\_i \lt q\_i \le K)

출력

가장 많은 사과를 수확하는 사람이 갖게 되는 사과의 개수를 출력한다.

힌트

입출력의 양이 많으므로, 빠른 입출력을 사용하는 것을 권장합니다. 대표적인 언어에 따른 빠른 입출력은 아래를 참고하세요.

  • C++: cin, cout을 사용하는 경우 입출력 전에 cin.tie(nullptr); ios::sync_with_stdio(false);를 한 번 적용해야 합니다.
  • Java: BufferedReader와 BufferedWriter를 사용해야 합니다.
  • Python3, PyPy3: input() 대신 sys.stdin.readline().rstrip()을 사용해야 합니다.

예제1

  1. 예제 1

    입력
    2 3
    3 7 6
    3 8 1
    3
    4 0 0 2 0 2 2 0 2
    6 2 1 2 2 3 2 3 0 1 0 1 1
    4 1 2 2 2 2 1 1 1
    1
    1 2
    
    예상 출력
    10