Loading

从 0 开始的min_max容斥证明

远古文章,谨慎食用

二项式反演

\[f_n=\sum\limits_{i=0}^nC^i_ng_i \Leftrightarrow g_n=\sum\limits_{i=0}^n{(-1)}^{n-i}f_i \]

证明:

容斥原理

\[|A_1 \cup A_2\cup\cdots\cup A_n|=\sum\limits_{1\le i\le n}|A_i|-\sum\limits_{1\le i<j\le n}|A_i\cap A_j|+\cdots+(-1)^{n-1}\times |A_1\cap A_2\cap \cdots \cap A_n| \]

证明:显然

如果一个元素 \(p\)\(m\) 个集合包含,那么 \(p\) 对于左侧的贡献是 \(1\)

对于右侧的贡献:

\[ \sum\limits_{i=1}^m(-1)^{i-1}C^i_m\\\large=-\sum\limits_{i=1}^m(-1)^{i}C^i_m\\\large = 1-\sum\limits_{i=0}^m(-1)^{i}C^i_m\\\large=1-(1-1)^m=1 \]

二项式定理

\[(x+y)^n=\sum\limits_{i=0}^nC^i_n x^i y^{n-i} \]

这个柿子可以理解为 ,\(n\) 个括号,每个括号选择 \(x\)\(y\) ,其中 \(i\) 个选了 \(x\) ,那么其余 \(n-i\) 个必然是\(y\) ,所以 \(x^i y^{n-i}\) 的系数是 \(n\) 个括号选择 \(i\) 个的方案数,即 \(C^i_n\)

容斥原理的最后一步就是这么证明的。


接着证明二项式反演

设集合 \(A_i\) 的补集是 \(B_i\) ,全集是 \(U\)\(C_A\) 表示 \(A\) 的补集

那么\(A_1 \cup A_2\cup\cdots\cup A_n\) 的补集就是 \(B_1 \cap B_2\cap\cdots\cap B_n\) ,结合容斥原理可得

\[|B_1 \cap B_2\cap\cdots\cap B_n|=|U|-\sum\limits_{1\le i\le n}|A_i|-\sum\limits_{1\le i<j\le n}|A_i\cap A_j|+\cdots+(-1)^{n-1}\times |A_1\cap A_2\cap \cdots \cap A_n| \]

\[\because C_{C_A}=A\\ \therefore |A_1 \cap A_2\cap\cdots\cap A_n|=|U|-\sum\limits_{1\le i\le n}|B_i|-\sum\limits_{1\le i<j\le n}|B_i\cap B_j|+\cdots+(-1)^{n-1}\times |B_1\cap B_2\cap \cdots \cap B_n| \]

考虑一种特殊情况:集合的交集大小只与集合个数有关。给出一种可行的情况: \(U=\{1,2,\cdots,2n\},A_i=\{1,2,\cdots,i-1,i+1,\cdots,n,i+n\}\)

于是珂以令 \(f(i)\)\(i\) 个集合补集的交集大小, \(g(i)\)\(i\) 个原集的大小。

得到:

\[f(n)=\sum\limits_{i=0}^n(-1)^iC^i_ng(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^n(-1)^iC^i_nf(i) \]

\(h(i)=(-1)^ig(i)\) ,那么

\[ f(n)=\sum\limits_{i=0}^n(-1)^iC^i_ng(i)=\sum\limits_{i=0}^nC^i_nh(i)\Leftrightarrow g(n)=\dfrac{h(n)}{(-1)^n}=\sum\limits_{i=0}^n(-1)^{i}C^i_nf(i)\\ 即f_n=\sum\limits_{i=0}^nC^i_nh_i \Leftrightarrow h_n=\sum\limits_{i=0}^n{(-1)}^{n-i}C_{n}^{i}f_i \]

Min_Max 容斥

给定集合 \(S\) ,设 \(max(S),min(S)\) 分别为 \(S\) 中的最大、最小值,那么

\[max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}min(T) \]

证明:

考虑构造一个系数 \(f(i)\) 使得 \(max(S)=\sum\limits_{T\subseteq S}f(|T|)min(T)\)

不妨 \(S=\{1,2,\cdots,n\}\)

考虑通过枚举哪些集合的最小值是 \(x+1\) 计算这个第 \(x+1\) 大的数的贡献,这个那么贡献就是 \(\sum\limits_{i=0}^xC^i_xf(i+1)\)

而我们希望这个柿子只有在 \(x=0\) 的时候恰好是 \(1\) ,其余时候都是 \(0\) ,这样等式右边一加恰好是 \(S\) 的最大数,等于等式左边,则

\[[x==0]=\sum\limits_{i=0}^xC^i_xf(i+1) \]

套用之前的二项式反演公式,设 \(A(x)=[x==0],B(x)=f(i+1)\)

由于 \(A(x)=\sum\limits_{i=0}^nC^i_nB(i)\)

可以得到 \(B(x)=\sum\limits_{i=0}^x(-1)^{x-i}A(i)\)

\(f(x+1)=\sum\limits_{i=0}^x(-1)^{x-i}[i==0]=(-1)^x\)

所以 \(f(x)=(-1)^{x+1}\)

\(max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}min(T)\)

证毕!

参考资料

http://blog.miskcoo.com/2015/12/inversion-magic-binomial-inversion

https://www.cnblogs.com/GXZlegend/p/11407185.html

https://blog.csdn.net/dt_kang/article/details/88805837

posted @ 2020-07-17 07:20  zzctommy  阅读(325)  评论(1编辑  收藏  举报