Description
给定一个大小为 $n \times n$ 的 $01$ 矩阵,其中你可以在 $0$ 的位置放置攻击装置。每一个攻击装置 $(x,y)$ 都可以按照“日”字攻击其周围的 $8$ 个位置。求在装置互不攻击的情况下,最多可以放置多少个装置。
$(1 \leq n \leq 200)$
Source
Solution
与 网络流 24 题 中的 骑士共存问题 几乎一样。
我们可以先将棋盘染色,得到
对于格子 $(x,y)$,若 $x + y$ 是奇数,则该格子为白色,否则为黑色。
很容易发现,放在白(黑)色格子上的攻击装置只能攻击到黑(白)色格子。
那么显然这是一个二分图。
我们把白色格子和黑色格子分成两部分。
如果某个白色格子可以攻击到某个黑色格子,则在它们之间连一条边。
一条边所连接的两个格子只能取其中一个(否则会互相攻击),所以问题变为求这个二分图的 最大独立集 。
最大独立集 = 总点数 - 最小点覆盖 = 总点数 - 最大匹配数
至于不能放攻击装置的格子,我们不把它当做二分图中的点即可,最后答案要减去这些点。
所以用 $\rm dinic$ 跑一遍最小割(最大流)就能够得到答案了。
Code
1 |
|