P0691

[Usaco2008 Nov]Guarding the Farm 保卫牧场

[Usaco2008 Nov]Guarding the Farm 保卫牧场

农夫约翰的牧场中有许多山丘。为了保护珍贵的奶牛,他希望在每座山丘的顶部安排一名守卫。请你计算他总共需要安排多少名守卫。

牧场的地形由一个包含 NN 行、MM 列的整数矩阵表示,其中 Hi,jH_{i,j} 表示第 ii 行、第 jj 列位置的海拔高度。

一个山顶由若干个相互连通且海拔相同的矩阵元素组成。山顶周围的所有位置必须是地图边界,或海拔严格低于山顶的矩阵元素。

若两个矩阵元素横坐标之差的绝对值不超过 11,且纵坐标之差的绝对值也不超过 11,则称它们相邻。

请计算地图中山顶的数量。

输入格式

第一行包含两个以空格分隔的整数 NN 和 MM,分别表示地图的行数和列数。

接下来 NN 行,每行包含 MM 个以空格分隔的整数。其中第 i+1i+1 行的第 jj 个整数为 Hi,jH_{i,j},表示地图中第 ii 行、第 jj 列位置的海拔高度。

输出格式

输出一个整数,表示地图中山顶的数量。

样例输入

8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0

样例输出

3

样例解释

地图中共有 33 个山顶,分别是左上角高度为 44 的山顶、右上角高度为 11 的山顶,以及地图底部高度为 22 的山顶。

数据范围

  • 1<N≤7001<N\le 700;
  • 1<M≤7001<M\le 700;
  • 0≤Hi,j≤1040\le H_{i,j}\le 10^4。

来源与许可

本题为 USACO 2008 年 11 月试题「Guarding the Farm」,题面与测试数据整理自 BZOJ 1619。

样例 1

输入

8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0

输出

3