容斥 学习笔记
笔记更新于 2020 年 6 月 26 日
小小的知识点,大大的坑。
容斥原理
设集合 S1…n,有
i=1⋃nSi=k=1∑n(−1)k+11≤p1<p2<⋯<pk≤n∑i=1⋂kSpi
多重集组合数
设集合 S 是由 k 个不同元素组成的大小为 n 的可重集合,对于 i∈[1,k],第 i 个元素有 ni 个。
对于 r∈[0,n],求从 S 中选出 r 个元素组成一个多重集的方案数。
答案为
t=0∑k(−1)t1≤p1<p2<⋯<pt≤k∑(k−1r+k−1−t−∑i=1tnpi)
反演
反演就是一些特殊的容斥。
欧拉反演
n=d∣n∑φ(d)
莫比乌斯反演
若
f(n)=d∣n∑g(d)
则
g(n)=d∣n∑μ(dn)f(d)
若
f(d)=d∣n∑g(n)
则
g(d)=d∣n∑μ(dn)f(n)
子集反演
若
f(S)=T⊆S∑g(T)
则
g(S)=T⊆S∑(−1)∣S∣−∣T∣f(T)
若
f(S)=S⊆T∑g(T)
则
g(S)=S⊆T∑(−1)∣T∣−∣S∣f(T)
多重子集反演
对于集合 S,定义 μ(S):若 S 存在重复元素则为 0,否则为 (−1)∣S∣。
若
f(S)=T⊆S∑g(T)
则
g(S)=T⊆S∑μ(S−T)f(T)
若
f(S)=S⊆T∑g(T)
则
g(S)=S⊆T∑μ(T−S)f(T)
莫比乌斯反演是多重子集反演的特殊形式。
二项式反演
若
f(n)=k=0∑n(kn)g(k)
则
g(n)=k=0∑n(−1)n−k(kn)f(k)
二项式反演是子集反演的特殊形式。
设交集至少有 i 个元素的方案数为 f(i),则
f(i)=(in)(22n−i−1)
设交集恰好有 i 个元素的方案数为 g(i),则
f(i)=j=i∑n(ij)g(j)
二项式反演一下,则
g(i)=j=i∑n(−1)j−i(ij)f(j)
因此答案为
g(k)=i=k∑n(−1)i−k(ki)(in)(22n−i−1)
时间复杂度 O(n)。
最值反演 / Min-Max 容斥
对于一个集合 S,有
max(S)=T⊆S∑(−1)∣T∣+1min(T)
min(S)=T⊆S∑(−1)∣T∣+1max(T)
这两个式子在期望下也成立。
max(S) 表示 S 被全部或为 1 的期望时间,min(S) 表示 S 被或到至少一位为 1 的期望时间,则有
ans=max(S)=T⊆S∑(−1)∣T∣+1min(T)=T⊆S∑(−1)∣T∣+11−∑X⊆(U−T)p(X)1
FWT 即可,时间复杂度 O(2nn)。
推广到 kth
kthmax(S)=T⊆S∑(−1)∣T∣+k(k−1∣T∣−1)min(T)
kthmin(S)=T⊆S∑(−1)∣T∣+k(k−1∣T∣−1)max(T)
这两个式子在期望下也成立。
ans=kthmax(S)=T⊆S∑(−1)∣T∣+k(k−1∣T∣−1)min(T)=T⊆S∑(−1)∣T∣+k(k−1∣T∣−1)∑i∈Tp(i)m
然后可以 DP,时间复杂度 O(nm(n−k))。
评论
暂无已公开评论。