스키 리프트

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

요약
높이 격자가 주어질 때, 임의의 칸에서 다른 칸으로 내리막 또는 평지 활강과 리프트로 도달할 수 있도록 필요한 단방향 리프트의 최소 개수를 구한다.
난이도

보통10점 중 7점

유형
그래프, 유니온 파인드, 그리디, 구현
정답자
아직 제출이 없습니다

문제

기후 변화로 알래스카의 완만한 산악 지대가 사계절 스키를 즐기기에 완벽한 장소가 되었다. 하지만 이 지역을 성공적인 스키장으로 만들려면 스키 리프트가 필요하다. 스키를 타는 사람은 위로 걸어 올라가는 것을 좋아하지 않는다. 그들은 내리막으로 활강하기를 원하며, 필요할 때는 잠시 같은 높이로 이동하는 정도는 감수할 수 있다.

이 지역을 최적으로 활용하려면, 임의의 한 지점에서 출발한 스키어가 오직 내리막으로 활강하거나 같은 높이로 이동하고 때때로 스키 리프트를 이용하는 것만으로 다른 임의의 지점에 도달할 수 있어야 한다.

이 조건을 만족하도록 충분한 수의 스키 리프트를 계획하고 건설해야 한다. 반대로 필요 이상으로 리프트를 많이 짓는 것은 돈 낭비이다.

필요한 스키 리프트의 최소 개수는 몇 개인가?

스키 리프트는 높은 기둥 위에 세워지므로, 사이의 지형과 무관하게 어느 지점에서 어느 지점으로든 세울 수 있다고 가정한다. 스키 리프트는 한 방향으로만 운행한다(단방향).

알래스카에서는 북, 남, 동, 서 네 방향 외의 방향으로는 스키를 탈 수 없다. 즉 스키어는 상하좌우로 인접한 칸으로만 이동할 수 있고, 그 칸의 높이가 현재 칸의 높이보다 낮거나 같을 때에만 활강으로 이동할 수 있다.

입력

입력의 첫 줄에는 테스트 케이스의 개수를 나타내는 정수 하나가 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

  • 한 줄에 두 정수 ww와 ll이 주어진다 (1≤w,l≤5001 \le w, l \le 500). 각각 지역의 너비와 길이이다.
  • 이어서 ww개의 줄이 주어지고, 각 줄에는 ll개의 정수 hijh_{ij}가 있다 (0≤hij≤1090 \le h_{ij} \le 10^9). 이는 지역의 각 지점의 높이를 나타낸다.

출력

각 테스트 케이스마다 건설해야 하는 스키 리프트의 최소 개수를 한 줄에 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    2
    5 5
    1 1 0 0 0
    1 1 1 1 0
    0 1 9 1 0
    0 1 1 1 1
    0 0 0 1 1
    1 10
    10 20 30 40 50 60 70 80 90 100
    
    예상 출력
    2
    1
    
  2. 예제 2

    입력
    1
    1 1
    0
    
    예상 출력
    0