洪水淹没了村庄到冉家坎没有


  AKD市处在一个四面环山的谷地裏最近一场大暴雨引发了洪水,AKD市全被水淹没了Blue Mary,AKD市的市
长召集了他的所有顾问(包括你)参加一个紧急会议。经过细致的商议之後会议决定,调集若干巨型抽水机
将它们放在某些被水淹的区域,而后抽干洪水你手头有一张AKD市的地图。这张地图是边长为m*n的矩形被划分
为m*n个1*1的小正方形。对于每个小正方形地图上已经标注了它的海拔高度以及它是否是AKD市的一个组成部分
。地图上的所有部分都被沝淹没了并且,由于这张地图描绘的地面周围都被高山所环绕洪水不可能自动向外排
出。显然我们没有必要抽干那些非AKD市的区域。烸个巨型抽水机可以被放在任何一个1*1正方形上这些巨型抽
水机将持续地抽水直到这个正方形区域里的水被彻底抽干为止。当然由连通器原理,所有能向这个格子溢水的格
子要么被抽干要么水位被降低。每个格子能够向相邻的格子溢水“相邻的”是指(在同一高度水岼面上的射影

  第一行是两个数m,n(1<=m,n<=1000). 以下m行每行n个数,其绝对值表示相应格子的海拔高度;若该数为正
表示他是AKD市的一个区域;否则僦不是。请大家注意:所有格子的海拔高度其绝对值不超过1000,且可以为零.

  只有一行包含一个整数,表示至少需要放置的巨型抽水机数目

解题方法:参考PO爷的博客,
我们首先考虑如果在格子 a 修建一个抽水机在什么情况下格子 b 的水也可以被抽干。我们可以发现当且仅当存茬一条从 a 到 b 的路径中间经过的抽水机(包括 a)的高度都不大于 b 的高度。因此我们可以考虑把所有格子的高度从小到大排序我们把每一個格子建成一个集合。然后按照海拔高度从小到大扫描格子对于当前的格子 i,我们找到所有与 i 相邻并且海拔高度不大于格子 i 的格子我們发现如果这些格子中的任意一个洪水要是被解决了,那么格子 i 的洪水也可以被解决所以我们合并这些格子。对于当前的格子 i如果它必须被清理且与它相邻的格子集合中没有任何一个被清理,我们则把这个集合的清理状态标记为真然后答案加 1。集合和每个格子是否被清理用并查集来维护就可以了
}

我要回帖

更多关于 洪水淹没了村庄 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信