만드는 중입니다

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

첨단 가지 농장

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

요약
눈 크기가 적힌 격자가 주어졌을 때, 인접한 칸끼리 크기 순서를 지키면서 높이 합이 최소가 되도록 각 칸의 높이를 정하는 문제입니다.
난이도

보통10점 중 7점

유형
동적 계획법, 정렬, 그래프, 위상 정렬
정답자
아직 제출이 없습니다

문제

밍구는 최첨단 가지 농장의 주인입니다. 가지 농장은 NN개의 행과 MM개의 열로 이루어진 격자이며, 각 칸의 토양에 가지가 한 그루씩 심겨 있습니다. 밍구는 물을 많이 받은 가지일수록 더 빨리 자란다는 사실을 알게 되었습니다. 그래서 가지들의 크기를 고르게 맞추려고 크기가 작은 가지에 더 많은 물을 주려고 합니다.

이를 위해 가지 농장에서는 토양의 높이를 임의의 음이 아닌 정수로 바꿀 수 있습니다. 물은 높은 곳에서 낮은 곳으로 흐르므로, 인접한 두 칸의 토양 중 높이가 낮은 쪽에 더 많은 물이 모입니다. 두 토양의 높이가 같으면 같은 양의 물이 모입니다. 두 칸이 한 변을 공유하면 서로 인접한 것으로 봅니다.

가지 크기를 고르게 맞추려면 인접한 두 칸 중 가지가 큰 쪽의 토양이 작은 쪽보다 높아야 합니다. 인접한 두 칸의 가지 크기가 같다면 두 토양의 높이도 같아야 합니다.

현재 모든 토양의 높이는 0입니다. 토양 한 칸의 높이를 hh로 바꾸려면 hh만큼의 일을 해야 합니다. 이때 hh는 음이 아닌 정수입니다. 가지 크기를 고르게 만드는 높이 배치 중에서 일의 총합이 최소인 배치를 구하세요.

다시 말해, 각 가지의 크기를 나타내는 N×MN \times M 크기의 양의 정수 행렬 SS가 주어집니다. 아래 조건을 만족하면서 각 토양의 높이 배치를 나타내는 N×MN \times M 크기의 음이 아닌 정수 행렬 HH를 구하세요.

  • 1≤i,k≤N1 \le i, k \le N, 1≤j,l≤M1 \le j, l \le M이고 ∣i−k∣+∣j−l∣=1|i-k| + |j-l| = 1인 모든 정수 i,j,k,li, j, k, l에 대해 다음 조건을 만족해야 합니다.
    • Si,j<Sk,lS_{i,j} < S_{k,l}이면 Hi,j<Hk,lH_{i,j} < H_{k,l}입니다.
    • Si,j=Sk,lS_{i,j} = S_{k,l}이면 Hi,j=Hk,lH_{i,j} = H_{k,l}입니다.
    • Si,j>Sk,lS_{i,j} > S_{k,l}이면 Hi,j>Hk,lH_{i,j} > H_{k,l}입니다.
  • HH의 모든 원소의 합이 최소여야 합니다.

입력

첫 번째 줄에 농장의 세로 길이 NN과 가로 길이 MM이 공백으로 구분되어 주어집니다. (1≤N,M≤1 0001 \le N, M \le 1\,000)

다음 NN개 줄에는 각 줄마다 한 행에 있는 가지들의 크기를 나타내는 MM개의 양의 정수가 공백으로 구분되어 주어집니다. ii번째 줄의 jj번째 수는 ii행 jj열에 있는 가지의 크기 Si,jS_{i,j}입니다. (1≤Si,j≤1091 \le S_{i,j} \le 10^9)

출력

NN개의 줄 각각에 MM개의 음이 아닌 정수를 공백으로 구분하여 출력합니다.

ii번째 줄의 jj번째 수는 일의 총합이 최소가 되는 높이 배치에서 ii행 jj열 토양의 높이 Hi,jH_{i,j}입니다.

답이 되는 행렬 HH는 유일합니다.

예제3

  1. 예제 1

    입력
    2 3
    1 5 2
    2 5 1
    
    예상 출력
    0 2 1
    1 2 0
    
  2. 예제 2

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

    입력
    5 5
    4 3 3 3 3
    4 2 2 1 1
    2 2 2 5 5
    2 2 5 5 5
    2 2 5 5 5
    
    예상 출력
    3 2 2 2 2
    3 1 1 0 0
    1 1 1 2 2
    1 1 2 2 2
    1 1 2 2 2