题解:P10938 Vani和Cl2捉迷藏
_jimmywang_ · · 题解
题意:求 DAG 的最长反链长度。
反链的概念来源于序理论,此处稍作简化处理。
因为偏序集可以视作一个 DAG,偏序关系即为有向边,此处为方便,将序理论中的概念迁移至 DAG 上。
定义 DAG 上两点
简单地说,链就是一条 DAG 的路径的子集,反链就是一个点集,其中的点两两没有有向路径连接。
做法1:最大权闭合子图
因为选了一个点,其所有的后继节点(可传递)均不能选,因此我们建立以下模型:
对原图每个点拆点
这个图比较好理解,因为一个最大的闭合子图一定是由若干个
做法2:Dilworth 定理
Dilworth 定理的表述:最长反链等于最小链覆盖。注意区分此处的链与路径。链是点集,不一定要求是一条路径。
证明采用归纳形式,详见 oi-wiki。
最小链覆盖的做法并不困难:先对原图做一遍传递闭包,此时所有的链都转化为了传递闭包后的图上的路径,此时再做最小路径覆盖的答案就是原图上最小链覆盖的答案。