找回密码
 立即注册
首页 业界区 安全 ABC445G Knight Placement 题解

ABC445G Knight Placement 题解

史华乐 2026-2-17 17:00:07
题外话

场上由于不会二分图最大独立集痛失 AK,qwq。
Solution

首先尝试图论建模,如果两个空格子可以互相攻击就连一条无向边。此时问题转化成图上最大独立集。
对于一般图,最大独立集是 NP-Hard 的,但对于二分图有多项式时间算法。玩玩样例,大胆猜测图是二分图。
下面证明该性质。显然 \(a,b\) 可以都先除以 \(\gcd(a,b)\)。此时如果 \(a+b\) 是奇数则按照 \(i+j\) 的奇偶性给格子染色。否则 \(a,b\) 均为奇数,按照 \(i\) 的奇偶性染色即可。
然后跑出二分图最大独立集并输出方案即可。关于二分图最大独立集的求法,需要多步转化:

  • 二分图最大独立集 \(\to\) 最小顶点覆盖的补集。
  • 加入源汇点 \(s,t\)。\(s\) 向左部点连权为 \(1\) 的有向边,左部点向右部点连权为 \(+\infty\) 的边,右部点向 \(t\) 连权为 \(1\) 的边。则最小顶点覆盖转化成最小割。
  • 应用最大流最小割定理,转化成最大流。
对于输出方案,一个点在最大独立集中当且仅当连接它和 \(s/t\) 的边不在最小割中。
Code

直接手写了 ISAP。
[code]#include #define rep(i,a,b) for(int i(a);i

相关推荐

2026-3-9 17:17:12

举报

您需要登录后才可以回帖 登录 | 立即注册