容斥

设$A_1,A_2,...,A_n$为$n$个性质, $N_k=\sum\limits_{1\le i_1<i_2<...<i_k\le n}|A_{i_1}A_{i_2}...A_{i_k}|$

其中$|A_{i_1}A_{i_2}...A_{i_k}|$就表示$A_{i_1},...,A_{i_k}$一定满足, 其余任意的方案数

也就是说$N_k$就为至少满足$k$个性质的方案数

如果$A_i$具有对称性的话, 那么$N_k=\binom{n}{k}|A_1A_2...A_k|$

 

问题1: 求至少满足一个性质的方案数

$$|A_1\cup A_2 \cup...\cup A_n|=\sum\limits_{i=1}^n(-1)^{i-1}N_i $$

证明很容易, 因为对于每个恰好具有$k$个性质的元素, 它被统计的次数为

$$\sum\limits_{i=1}^k(-1)^{i-1}\binom{k}{i}=1$$

从另一个角度考虑, 假设$|A_1 \cup...\cup A_n|=\sum\limits_{i=1}^n f_i N_i$, 其中$f_i$为容斥系数

那么对于恰好$k$个性质的元素, 出现次数为$\sum\limits_{i=1}^k \binom{k}{i}f_i =1$

也就等价于$f_k=1-\sum\limits_{i=1}^{k-1}\binom{k}{i}f_i$, 初始条件$f_1=1$

可以推出$f_i=(-1)^{i-1}$, 这样就从另一个角度推出了容斥公式

 

例1: 有一个$1\times n$的格子, 一共有$m$种颜色, 每个格子要染一种, 颜色$1$至少要用一次, 求方案数.

答案很容易得到, 用不成立的方案减一下即可, 也就是$m^n-(m-1)^n$. 我们考虑利用容斥来做.

设性质$A_i$表示第$i$格为颜色$1$. 那么可以得到$N_k=\binom{n}{k}|A_1A_2...A_k|=\binom{n}{k}m^{n-k}$

所以$ans=\sum\limits_{i=1}^n (-1)^{i-1} \binom{n}{i}m^{n-i}=m^n-(m-1)^n$

可以发现和最初得到的答案是一致的

 

 

问题2: 求恰好具有$x$个性质的方案数

设$E(x)$表示恰好具有$x$个性质的方案数.

按照上面的经验, 设$E(x)=\sum\limits_{i=x}^n f_i N_i$

对于恰好$k$个元素的方案数为$\sum\limits_{i=x}^{k}f_i \binom{k}{i}=[k=x]$

当$k=x$时, $f_k=1$

当$k>x$时, $f_k=-\sum\limits_{i=x}^{k-1}f_i \binom{k}{i}=(-1)^{k-x}\binom{k}{x}$

也就得到

$$E(x)=\sum\limits_{i=x}^n (-1)^{i-x}\binom{i}{x}N_i$$

当$x$取$0$时, 就得到不满足任意性质的方案为$\sum\limits_{i=0}^n(-1)^i N_i$, 其中$N_0$为总的方案数

例2: $n$个格子, $m$种颜色, 求每种颜色至少出现的方案数.

记$A_i$表示第$i$种颜色不出现, $N_i=\binom{m}{i}(m-i)^n, ans=\sum\limits_{i=0}^m (-1)^i\binom{m}{i} (m-i)^n$

 

 

问题3: 求至少满足$x$个性质的方案数.

利用问题2的结论可以得到

$$\sum\limits_{i=x}^nE(i)=\sum\limits_{i=x}^n \Bigg(\sum\limits_{j=x}^i(-1)^{i-j}\binom{i}{j} \Bigg) N_i$$

 

 

 

线性求阶乘逆元

int fac[N], ifac[N];
void init() {
	fac[0]=1;
	REP(i,1,N-1) fac[i]=(ll)fac[i-1]*i%P;
	ifac[N-1] = qpow(fac[N-1],P-2);
	PER(i,1,N-1) ifac[i-1]=(ll)ifac[i]*i%P;
}

 

1. CF 998E Sky Full of Stars 

n*n棋盘, 三种颜色, 每个格子必须染成其中一种, 求至少有一行或一列同色的方案数. (n<=1e6)

设$f(i,j)$固定$i$行$j$列必须同色其余任意的方案数. 只固定行或列的情况下, 每行或每列颜色颜色可以不同, 否则的话因为有交叉, 整个连通块必须同色, 可以得到

$$f(i,j) =   \begin{cases} 3^{n(n-i-j)+i+j},  & \text{$i=0$或$j=0$} \\ 3^{(n-i)(n-j)+1}, & \text{其它} \end{cases}$$

由容斥可以得到$ans=\sum\limits_{\substack{0\le i\le n \\ 0\le j \le n\\i+j>0}}(-1)^{i+j-1}\binom{n}{i}\binom{n}{j}f(i,j)$

对于$i=0$或$j=0$的情况直接$O(n)$即可求出, 考虑$i>0$且$j>0$的情况, 有

$\begin{align}\notag ans & =\sum\limits_{\substack{1\le i\le n \\ 1\le j \le n}}(-1)^{i+j-1}\binom{n}{i}\binom{n}{j}3^{(n-i)(n-j)+1} \\ & =  \sum\limits_{i=1}^n\Bigg((-1)^{i+1}\binom{n}{i}3^{n^2-ni+1}\sum\limits_{j=1}^n(-1)^j\binom{n}{j}3^{(i-n)j}\Bigg) \notag \\ & = \sum\limits_{i=1}^n\Bigg((-1)^{i+1}\binom{n}{i}3^{n^2-ni+1}((1-3^{i-n})^n-1)\Bigg)\notag \end{align}$

可以线性求出.

 

2. hdu 6314

n*m棋盘, 每个格子染成黑或白, 求至少x行,y列全为黑色的方案数.

 

posted @ 2019-05-27 09:53  uid001  阅读(153)  评论(0编辑  收藏  举报