【学习笔记】Dilworth 定理

Dilworth定理

定义偏序集合 (x,) 这里的 不代表 “小于等于”,而是一种关系

定义 “可比” 表示 x 中的两个元素满足 ab 或者 ba,反之就是不可比

偏序集合中的元素满足如下三点

  • aa

  • ba,acbc

  • ab,baa=b

定义一个链为链中相邻的元素可比,同时不难发现任意元素可比,同时定义反链表示任意元素不可比

定义极小元 x 表示在当前的偏序集所有的可以和其相比的元素 y 中,都满足 xy

由上得到一个定理:

  • {S} 的最长链长度为 r,那么最小反链划分等于 r

证明如下:设 p 为最小反链划分

首先考虑如果可以划分出来比 r 更小的反链个数,那么必然有两个最大链中的元素属于同一个反链

不符合条件,那么 pr

另一个部分考虑证明 pr 不断取出来 {S} 中的极小元集合,设一共取出了 k 次,那么那么不难发现必然有一个长度为 k 的链

考虑有 p 为最小反链划分,每次取出来的最小元集合必然内部不可比,所以是一个反链划分,所以有 rkp

对偶上述定理,得到 Dilworth 定理

  • {S} 的最长反链长度大小为 r,那么集合中最少可以划分出来 r 个链

第一部分改变定义之后完全一样,第二部分不是极小元,而是每个极小元所在的联通块

例题

CTSC2008 祭祀

先跑 Floyd 传递闭包和最大独立集过第一问

有一种最大独立集的构造方式是:

  • 从右侧没有匹配的点开始 dfs,向左侧只能走非匹配边,左侧向右侧只能走匹配边

  • 取左侧被访问的点和右侧没有被访问的点得到最大独立集

  • 取最大独立集的补集得到最小点覆盖

对应到这个题目中就是对于 in 被访问而 out 没有被访问的点(注意 out 是左部点)

证明:

{C} 表示最小点覆盖的集合,{I} 表示最大独立集的集合,mat 表示最大匹配数,{S}

|I|=2n|C|=2nmat,|I||C|= 表示有一些点只有 in/out{S}

这样的点不超过 n 个那么 |I|nmat,而 |I| 一定不会大于 nmat,也就是二分图的正确性

证毕

Codeforces590E

不难发现如果求出来了字符串两两之间的子母串关系,那么这个问题就转化成了上面的问题

子母串是 AC 自动机的管理范畴(所以又重学了 AC 自动机)

这里每次暴力沿着 fail 树往上面跳复杂度就成 Θ(n) 的,那么不难想到维护当前和最长子串然后跑 Floyd 传递闭包

首先维护 AC 自动机上每个点的前驱,这个在 insert 的时候不难做

并维护每个点不断跳 fail 能得到最近有标记结尾的点,在并查集中放到同一个集合里面

处理 1n 所有的串,每次沿着结尾点不断跳上文定义的父亲,并且连上这个点和这个点跑 fail 的并查集得到的点

最后跑个祭祀就完事了

posted @   没学完四大礼包不改名  阅读(376)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示