最小链覆盖 Dilworth’stheorem

本文介绍了Dilworth定理,即最小链覆盖等于最长反链长度,与偏序集、全序集、链和反链等概念。通过实例探讨了Dilworth定理在序列、导弹拦截、字符串染色、有向无环图(DAG)最小路径覆盖等问题中的应用,包括最小不相交路径覆盖和最小可相交路径覆盖的求解策略。

话说这个专题网上的讲解都没有很全,窝就将他们的总和一下。

如果有问题请私信,评论。


首先说一下最小链覆盖定理,这个本质上是有点抽象的。

偏序集 \color{red} \text{偏序集} 偏序集的概念:

我们设当前的全集为 X X X。也就是一个 偏序集 \color{red}\text{偏序集} 偏序集,因为其元素部分可以比较大小。

对于 X X X 的一个子集满足其是全序集,及其所有的元素可以比较大小。

反链对于 X X X 的一个子集,满足其任意非空子集都不是全序集, 即所有的元素不能比较大小。

链覆盖若干个链的并集为 X X X,且两两交集为 ∅ \empty

反链覆盖若干个反链的并集为 X X X,且两两交集为 ∅ \empty

最长链所有链中元素最多的集合(可以有多个)。

最长反链所有反链中元素最多的集合(可以有多个)。

偏序集高度最长链的元素个数。

最长反链最长反链的元素个数。


狄尔沃斯定理( D i l w o r t h ’ s t h e o r e m Dilworth’s theorem Dilworthstheorem)

最小链覆盖 = = = 最长反链长度 = = = 偏序集宽度

最小反链覆盖 = = = 最长链长度 = = = 偏序集高度

emmm,其实本质上对于链的定义可以靠自己,但是基本上按照题目的限制来。


D i l w o r t h  定理在序列中的应用 \color{red}Dilworth\text{ 定理在序列中的应用} Dilworth 定理在序列中的应用

导弹拦截

其实挺经典的,对于第一问不说。

对于第二问,考虑我们需要通过非严格下降子序列覆盖。

那么我们不妨定义链为非严格下降子序列。那么最小链覆盖就是最长的反链长度,也就是严格上升子序列的长度。

CF1296E2 String Coloring (hard version)

给你一串长度为 n n n 的字符串,你可以给每个位置上染上一种不大于 n n n 的颜色。

对于相邻的两个位置,如果他们的颜色不同则可以交换他们的位置。现在需要交换若干次后按照字典序排序

你需要找到最少满足条件的颜色数并输出方案。

我们考虑对于一个不用交换的序列也就是非严格上升序列,我们不用用别的颜色。所以本题就是问最少非严格上升序列的个数,将其当做链。那么我们需要求的反链长度就是最长严格下降子序列的长度。

某牛客题: \color{red}\text{某牛客题:} 某牛客题:

5CWs8s.png

我们考虑对于纸飞机的飞行路径肯定是严格下降子序列,求其的最小覆盖,等价于求非严格最长上升子序列长度。

但是本题需要求除去一个数之后的答案,我们考虑对于同一个长度的答案是否有多种可能性。我们之前是维护以第 i i i 个数结尾的长度,我们再记录一下最长序列第 x x x 个位置的最大值,每次更新。

注意状态不能是 f ( i ) f(i) f(i) 表示数 i i i 结尾的最大长度,这会有重复,导致无法进行之后的 D p Dp Dp

对于同一个长度的序列有多个方案而且当前的数被选中了,那么不用减去 1 1 1 ,不然肯定需要去掉当前的数。

#include <bits/stdc++.h>
using namespace std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值