【学习笔记】Dilworth 定理
Dilworth定理
定义偏序集合 这里的 不代表 “小于等于”,而是一种关系
定义 “可比” 表示 中的两个元素满足 或者 ,反之就是不可比
偏序集合中的元素满足如下三点
定义一个链为链中相邻的元素可比,同时不难发现任意元素可比,同时定义反链表示任意元素不可比
定义极小元 表示在当前的偏序集所有的可以和其相比的元素 中,都满足
由上得到一个定理:
- 设 的最长链长度为 ,那么最小反链划分等于
证明如下:设 为最小反链划分
首先考虑如果可以划分出来比 更小的反链个数,那么必然有两个最大链中的元素属于同一个反链
不符合条件,那么
另一个部分考虑证明 不断取出来 中的极小元集合,设一共取出了 次,那么那么不难发现必然有一个长度为 的链
考虑有 为最小反链划分,每次取出来的最小元集合必然内部不可比,所以是一个反链划分,所以有
对偶上述定理,得到 定理
- 设 的最长反链长度大小为 ,那么集合中最少可以划分出来 个链
第一部分改变定义之后完全一样,第二部分不是极小元,而是每个极小元所在的联通块
例题
CTSC2008 祭祀
先跑 传递闭包和最大独立集过第一问
有一种最大独立集的构造方式是:
-
从右侧没有匹配的点开始 ,向左侧只能走非匹配边,左侧向右侧只能走匹配边
-
取左侧被访问的点和右侧没有被访问的点得到最大独立集
-
取最大独立集的补集得到最小点覆盖
对应到这个题目中就是对于 被访问而 没有被访问的点(注意 是左部点)
证明:
设 表示最小点覆盖的集合, 表示最大独立集的集合, 表示最大匹配数,
表示有一些点只有 在 中
这样的点不超过 个那么 ,而 一定不会大于 ,也就是二分图的正确性
证毕
Codeforces590E
不难发现如果求出来了字符串两两之间的子母串关系,那么这个问题就转化成了上面的问题
子母串是 自动机的管理范畴(所以又重学了 自动机)
这里每次暴力沿着 树往上面跳复杂度就成 的,那么不难想到维护当前和最长子串然后跑 传递闭包
首先维护 自动机上每个点的前驱,这个在 的时候不难做
并维护每个点不断跳 能得到最近有标记结尾的点,在并查集中放到同一个集合里面
处理 所有的串,每次沿着结尾点不断跳上文定义的父亲,并且连上这个点和这个点跑 的并查集得到的点
最后跑个祭祀就完事了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律