一个老坑的补 | Dilworth 定理
主要参考:浅谈Dilworth定理 - cmwqf。
「启」
想起来这个定理,是因为我在古远的时候(大约今年 \(3\) 月?)遇到了但是没有进一步了解,今天突然又看到导弹拦截这道题,于是就想把它进一步里了解一下。
「定理内容」
偏序集上最小链划分中链的数量等于其反链长度的最大值。
一看,偏序集,最小链划分,反链,都不会(
于是下面开始逐一理解 看 定 义(
「偏序集」
定义一种比较关系使得两种元素进行比较,比如我们定义 \(x \operatorname{Aqua} y\) 当且仅当 \(x,y\in Z\) 且 \(x \le y.\)
显然 \(x\) 和 \(y\) 都满足 \(\in Z\) 的时候她们两个是可比的,否则若有一个不满足,我们则称这两个元素不可比。
那么偏序集 \(S\) 就定义为满足以下性质的允许存在不可比元素的集合:
-
自反性:\(\forall x \in S,x \le x;\)
-
对称性:\(\forall x,y \in S,x \le y \Rightarrow y \ge x;\)
-
传递性:\(\forall x,y,z \in S,x \le y,y \le z \Rightarrow x \le z.\)
「链划分」
若我们把满足 \(x,y \in S,x \le y\) 的 \(x,y\) 之间建立一条 \(x \to y\) 的边,那么显然的是偏序集是一张 DAG.
把 \(S\) 中的元素划分为若干条链,使得每个元素都在且仅在唯一的一条链中,叫做链划分。
「反链」
链是 DAG 上的某条路径上的元素,而反链和链的定义恰好相反,对于一个集合,它是反链当且仅当这个集合里的元素两两都是不可比的,即这个集合中的元素两两不连通。
也就是说,我们将一个偏序集 \(S\) 划分为若干个小集合,使得每个小集合里的元素构成一条链,这个最小的划分数量,等于这个偏序集最长的反链的长度。
然后就能利用这个来做一些看起来很难的题。
以下摘自我的杂题记录。
「例题」
- 洛谷 | P3974 组合数学 [TJOI2015] [省选+/NOI-]
好喵一题。
其实做这道题只是在看自己之前的博客的时候想起来之前有个 Dilworth 定理,然后就随着一个博客(浅谈Dilworth定理 - cmwqf)学习的时候,找到了这道题。
众所周知题目名字里有啥,这道题就不用啥做,所以这道题用不到组合数学(
我们把这道题中的每个点 \((i,j)\) 拆成 \(val(i,j)\) 个点,然后把能够到达的点之间连边,最后变成了一个 DAG,题目所求就是求这个图的最小链的划分,根据 Dilworth 定理,这个 DAG 的最小链划分就等于它的最长反链的长度。
按照我们建图的操作来说的话,这个反链就是说的最长的不能到达的链,也就是说要求每个点的右上和左下矩阵中点权值的最大值,于是直接 DP 即可。
for(int i(1);i<=n;++i)
for(int j(m);j;--j)
{
f[i][j]=f[i-1][j+1]+a[i][j];
f[i][j]=Hmax(Hmax(f[i][j],f[i-1][j]),f[i][j+1]);
}
答案即为 f[n][1]
.