P3355 骑士共存问题
骑士攻击图天然二分,但不能把障碍当成顶点
问题
P3355 骑士共存问题
在有障碍的 棋盘上放尽量多的骑士,任意两匹骑士不能互相攻击。骑士可走 或 。
数据规模:,,其中 为障碍数。
借用上一题 P2774 方格取数问题 的独立集概念,这题也可以转化为类似的模型。
把每个可以放置骑士的格子看成一个顶点,如果两个格子上的骑士能够互相攻击,就在它们之间连接一条冲突边。
要求放尽量多的骑士,并保证任意冲突边的两个端点不能同时被选择,因此题目就是冲突图上的最大独立集。
而骑士每次移动,一个坐标变化 ,另一个坐标变化 ,所以 的奇偶性一定发生改变。因此每一条骑士攻击边都只连接奇格与偶格。按照 奇偶性染色以后,攻击图天然是一张二分图。
和前面那题一样的是,独立集 的补集就是 点覆盖,所以:最大独立集大小 = 总点数 - 最小点覆盖。
由于本题没有点权,对于无权二分图来说,根据 König 定理:最小点覆盖大小 = 最大匹配大小。
所以设所有可用格数量为 ,二分图最大匹配大小为 ,答案就是:。
这里既可以直接写匈牙利算法,也可以按照 P2756 飞行员配对方案问题 的单位容量流网络求最大匹配。
与 P2774 不同,本题中间攻击边只承担匹配关系,因此容量直接设为 即可,不需要使用表示强制覆盖约束的 inf。
▶
P3355 建图
1 | |
P3355 骑士共存问题
http://miqiu.space/posts/p3355001/