发现自己并不会 Dilworth 定理的构造性证明(原题要求输出方案),于是去 Wiki 上学习了一下。下文是我参照 Wiki 上的证明思路口胡的一个证明。
附例题:Codeforces 590E
Dilworth 定理: DAG 的最长反链大小等于最小链覆盖大小。
反链是指从图中的一个点的集合,使得集合内点两两不可达;链覆盖是指用若干条可以相交的链覆盖图中所有的点。
证明:
-
首先考虑如何求 DAG 的最小链覆盖。
传递闭包,转化成用若干条不能相交的链进行覆盖。然后给每个点拆成两个点 \((u,u')\),分别代表入点和出点,对于原图任何一条边 \((u,v)\),从 \(u\) 向 \(v'\) 连边,最终的答案就是 \(n\) (图的点数)减去该二分图的最大匹配数。这是因为一条匹配边意味着边两端的点可以被放在同一条链中,且入点和出点保证了每个点的入度和出度都不超过 \(1\).
利用这种方法,我们可以求出 DAG 最小链覆盖的大小,并得到一种将二分图最大匹配的方案和 DAG 最小链覆盖的方案建立对应的方法。