lg容斥与反演

容斥与反演

容斥

之前从没有搞清楚的:

容斥是一种方法,为了做到不重复计数,先算总和再去除重复的方法。


所以我们可以计算任意具备一种性质的元素个数(并),通过计算“至少具备了某些元素的个数”(交)。

另一种形式:总数-不满足所有性质的元素=任意满足一种性质的元素

此时,不满足所有性质即可表示为 S(1)n|S|P(S) 其中 P(S) 表示满足 S 中所有性质的个数。

  • 小星星 [ZJOI2016]:
  • 朴素 dp:令 f(i,j,S) [int:子树i,int:i映射到j,set:子树中的对应编号集合|的方案数]
  • 考虑优化,寻找 dp 重复做了什么,哪些限制会导致复杂度高,可不可以不做
  • 由于我们要避免重复映射,所以要存储子集。
  • 所以考虑容斥解决这个问题
  • 恰好不好满足,就可以转化为至少至多

  1. =
  2. minmax
  3. 至少或至多
  4. 其他限制难以计算的时候

例子:用这个把他变成别的条件!

那么我们就希望,存在 fi

i=0m(mi)fi=am

那么可以递推求 f,则答案:

ans=i=0(ni)(ni)!fi

反演

  • 本质

二项式反演

gn=i=0n(ni)fifn=i=0n(ni)(1)nigi

  • 再探错排

gn 表示所有人随便站,fn 表示恰好 n 个人站错的方案数。

那么 g,f 满足上述 (1) 式。可惜我们要求 fn

  • 证明 (vfk)

考虑这个

fn=m=0n[nm=0(nm)fm

正确性显然

k=0n(1)k(nk)=[n=0]

使用二项式定理展开 (11)n 可得,并代入

最后一个式子后面的求和即为 g

  • 其他形式

常用限制放缩方法。比起容斥,这时我们不必推导容斥系数。

  • P4859已经没有什么好害怕的了:

放松限制,允许有一定重复,这样就不错了。

子集反演

  • 高维前缀和/子集和

实际上认为每一个二进制数的位是一个维度,取值0/1,即有 n 个维度的前缀和

  • 一维前缀和:扫一遍

  • 二维前缀和:先扫x再扫y

  • 高维前缀和:一维一维扫


F[S]=TSG[T]G[S]=TS(1)|S||T|F[T]

组合意义:若 F 是 G 的高维前缀和,则 G 是 F 的高维差分。


  • kosare

  • Ribbons on Tree

min-max 反演

max{S}=TS(1)|T|+1min{T}

kthmax(S)=TS(1)|T|k(|T|1k1)min(T)


  • 按位或:考虑时间问题使用 min-max 容斥。将最大的时间戳变成最小的。

    只需高维前缀和。

斯特林反演


  • 方阵

只有行列其中一个的限制很容易,考虑用这个计算答案。看作分成若干等价类,则存在Stirling 反演的式子。

  • *异或图

容斥/反演掉连通图限制。即考虑 总共-不连通 总共-多个连通块的

可枚举子集划分,每个子集随便连,这样就有若干连通块(大于等于子集划分个数的方案数)。

这就是至少的意义:

posted @   haozexu  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示