Loading

Dilworth 定理

Dilworth 定理的应用应该说是比较广泛了。最近碰到了不少题目都要用到这玩意。

内容:对于任意有限偏序集,其最长反链的元素数等于最小链覆盖中的链数。

简单来说就是对于满足 \(\forall u,v,w \in V,(u,v),(v,w) \in E \Rightarrow (u,w) \in E\) 的图 \(G = (V, E)\),有 \(G\) 的最大独立集等于 \(G\) 的最小可相交路径覆盖。

证明:我们视偏序集中的偏序关系等价于单向边,偏序集形成的图是 DAG。

容易发现同一条链中的点不能同时存在于反链中,所以最长反链 \(\le\) 最小链覆盖。

对于一个 \(n\) 个点的偏序集形成的 DAG 求最小链覆盖可以用二分图匹配解决。建一个入点 \(i\) 和出点 \(i + n\),然后对于一条边 \((u, v)\)\(u\)\(v + n\) 连边,然后求一下最大匹配 \(x\)。答案就是 \(n - x\)

考虑最大独立集一定是 \(2n - x\),那么最大独立集两端的 \(i\)\(i+n\) 都选的至少有 \(n - x\) 个。这 \(n - x\) 个形成的必然是反链,所以最长反链 \(\ge\) 最小链覆盖。

所以最长反链等于最小链覆盖!


trick

这个定理在关于最长上升/下降子序列中有很多运用。一个序列需要划分成的上升子序列数等于最长不上升子序列长度。

板子:NOIP1999普及组 导弹拦截

这题也可以运用这个性质

CF1620F. Bipartite Array
给定一个排列,要求把若干元素取反,使得最长下降子序列 \(\le 2\)

题解

也就是要求能拆分成两个最长上升子序列。

\(\rm DP\) 一下,记录上一个元素有没有取反,存上一个元素值至少要是多少即可。

posted @ 2021-12-22 17:35  zhoukangyang  阅读(32)  评论(0编辑  收藏  举报