24.骑士共存问题¶
题目¶
在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入
对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士,使得它们彼此互不攻击。
题解¶
我才不会说我之前一直都没用当前弧优化这次被卡才用起来的。
按照套路,将图黑白染色,将白点放到X集合,黑点放到Y集合,我们知道可以相互攻击的两个点一定在不同的两个集合中,然后按照套路将问题转化成最小割解决。
连边方式:
- S向X集合中的没障碍的点连边容量为1。
- Y集合中的没障碍的点向T连边容量为1。
- 对于可以互相攻击到的两个点从一个点(假设他在X集合中)向另一个点(肯定在Y集合中)连边容量为inf。
所有点数减去有障碍的点数然后减去最大流就是结果。
正确性可以参考一下之前的然后稍作思考就知道了。