码迷,mamicode.com
首页 > 其他好文 > 详细

「hdu - 6355」Fireflies

时间:2021-04-14 11:52:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:empty   cto   问题:   mat   intro   begin   就是   set   play   

link。


DAG 上的可重最小链覆盖,转化成偏序集的最大反链,其中偏序 \(\mathrm x \leq \mathrm y\) 当且仅当每一维 \(x_i \leq y_i\)

以下记 \(a_i = p_i - 1\)。考虑如下的等价问题:

给定包含 \(n\) 种元素的多重集 \(S\),其中 \(i\) 种元素出现 \(a_i\) 次。

定义子集之间的偏序为 \(\subseteq\),求最大反链。

\(a_i = 1\) 时即 Sperner 定理。事实上,该定理可以推广得到如下结果:

\(M = \lfloor\frac{\sum a}{2}\rfloor\),则选择所有大小为 \(M\) 的子集即达到最大反链。


考虑证明。

LYM 不等式:

记反链中大小为 \(i\) 的子集数量为 \(s_i\),有:

\[\sum_{i=0}^{n}\frac{s_i}{\binom{n}{i}}\leq 1 \]

证明:

考虑一条最长链 \(\empty\sube T_1 \sube \dots \sube T_n = S\),其中 \(|T_i| = i\)

包含某个大小为 \(k\) 的子集 \(P_k\) 的最长链数量为 \(k!(n-k)!\)。所有最长链总数为 \(n!\)

对于一条反链,没有两个子集在同一个最长链上,所以有不等式:

\[\sum_{i=0}^{n} i!(n-i)!s_i \leq n! \]

得证。


Sperner 定理:

\(n\) 元集合,最多能选出 \(\binom{n}{\lfloor\frac{n}{2}\rfloor}\) 个子集,满足没有任何两个子集之间存在包含关系,。

证明:

不难发现这是一个下界,考虑证明它同时也是上界。

由于 \(\binom{n}{\lfloor\frac{n}{2}\rfloor} \geq \binom{n}{i}\),所以 \(\sum_{i=0}^{n}s_i/\binom{n}{\lfloor\frac{n}{2}\rfloor}\leq\sum_{i=0}^{n}s_i/\binom{n}{i}\leq 1\),得到 \(\sum s_i \leq \binom{n}{\lfloor\frac{n}{2}\rfloor}\),于是它为上界。

然而很可惜的是,我并不会按照这个思路推广(查了 wiki 也不会,水平有限)。

考虑另一种证法(在《Introductory Combinatorics》中的 5.6 写到了这种证法)。

依然只需要证明上界,考虑用 Dilworth 定理转化,只需要找到一个大小为 \(\binom{n}{\lfloor\frac{n}{2}\rfloor}\) 的链覆盖。

引入对称链的概念:我们称子集链 \(T_1 \sube T_2 \sube \dots \sube T_k\) 是对称链,当且仅当 \(|T_i| + 1 = |T_k|\)\(|T_1| + |T_k| = n\)

注意到每条对称链恰好包含一个大小为 \(\binom{n}{\lfloor\frac{n}{2}\rfloor}\) 的子集,因此对称链覆盖大小一定为 \(\binom{n}{\lfloor\frac{n}{2}\rfloor}\)


归纳构造对称链覆盖,只有一个元素时是平凡的,考虑往已经求出链覆盖的集合中加入元素 \(x\)

对于链覆盖中每条对称链 \(T_1 \sube T_2 \sube \dots \sube T_k\),分两种情况:

(1)\(k = 1\),在链覆盖中加入链 \(T_1\sube T_1\cup\{x\}\)

(2)\(k\neq 1\),在链覆盖中加入链 \(T_1 \sube T_2 \sube \dots \sube T_k\sube T_k\cup \{x\}\)\(T_1\cup \{x\} \sube T_2\cup \{x\} \sube \dots \sube T_{k-1}\cup \{x\}\)

不难发现它仍然是链覆盖(每个子集都不重不漏地被包含在某条链中),且每条链仍然是对称链。

这个证法就比较好推广到多重集上了。

多重集情况的证明:

大致思路一致,归纳构造对称链,每次加入 \(a\) 个元素 \(x\)。为了方便,以下记 \(k\times x\) 表示 \(k\) 个元素 \(x\)

对于链覆盖中每条对称链 \(T_1 \sube T_2 \sube \dots \sube T_k\),依次加入如下的链(如果长度不够了就不管):

\[\begin{aligned} T_1 \sube T_2 \sube \dots \sube T_k\sube T_k\cup \{1\times x\}\sube T_k\cup \{2\times x\}\sube \dots\sube T_k\cup \{a\times x\} \T_1\cup \{1\times x\} \sube T_2\cup \{1\times x\} \sube \dots \sube T_{k-1}\cup \{1\times x\}\sube T_{k-1}\cup \{2\times x\}\sube \dots\sube T_{k-1}\cup \{a\times x\} \T_1\cup \{2\times x\} \sube T_2\cup \{2\times x\} \sube \dots \sube T_{k-2}\cup \{2\times x\}\sube T_{k-2}\cup \{3\times x\}\sube \dots\sube T_{k-2}\cup \{a\times x\} \\dots \T_1\cup \{a\times x\} \sube T_2\cup \{a\times x\} \sube \dots\sube T_{k-a}\cup \{a\times x\} \\end{aligned} \]

依然不难发现它仍然是链覆盖,且每条链仍然是对称链。

由于每条对称链都包含恰好一个大小为 \(\lfloor\frac{\sum a}{2}\rfloor\) 的子集,因此这就是上界。


之后就是个经典容斥,可以将组合数拆成 \(n\) 次多项式,然后 meet in the middle 即可。

直接做 \(O(2^{n/2}n^2)\)。注意到合并是个卷积,可以先代点值最后插值得到 \(O(2^{n/2}n)\) 的做法。

「hdu - 6355」Fireflies

标签:empty   cto   问题:   mat   intro   begin   就是   set   play   

原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14653237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!