Min-Max 容斥学习笔记

Min-Max 容斥学习笔记

My Blogs

核心公式

maxiSxi=TS(1)|T|1minjTxjminiSxi=TS(1)|T|1maxjTxj

证明:转换成容斥原理的一般(集合)形式。构造映射 f:x{i|ix},则 f(min(x,y))=f(x)f(y)f(max(x,y))=f(x)f(y)。代入上式,得到:

maxiSxi=|iSf(xi)|=TS(1)|T|1|jTf(xj)|=TS(1)|T|1minjTxj

对于第二个公式同理。

看似没有什么用,但是其在期望意义下也是成立的,即:

E(maxiSxi)=TS(1)|T|1E(minjTxj)E(miniSxi)=TS(1)|T|1E(maxjTxj)

扩展

kthmaxiTxi=ST(1)|S|k(|S|1k1)miniTxikthminiTxi=ST(1)|S|k(|S|1k1)maxiTxiE(kthmaxiTxi)=ST(1)|S|k(|S|1k1)E(miniTxi)E(kthminiTxi)=ST(1)|S|k(|S|1k1)E(maxiTxi)

证明好复杂。。不会。。

例题

P3175 [HAOI2015] 按位或

看出了 Min-Max 容斥就是板子题了。可以设 xi 变量为第 i 位变成 1 的时间。求得就是:

E(maxiSxi)

直接套板子:

E(maxiSxi)=TS(1)|T|1E(minjTxj)

转成了 min,这样就是“集合内第一个数变成 1” 的期望时间。可以设 x=TSaT,这样第一个数出现的期望就是:

E=xi=0(ix)i(i+1)

用等比数列求和的套路变形两次就可以得到:

E=1x

多次求可以先求 1x,即 TS=aT,暴力是 O(3n),用 FWT 优化到 O(n2n)

P5643 [PKUWC2018] 随机游走

max 转成 min,设 gi 表示从 i 出发第一次到达 T 中的点的期望步数。可以归纳证明对于任意的 igi 都可以表示成 Ai+Bigfa。证明如下:

iT,则 gi=0

i 是叶子,则 fi=1+fai

否则 gi=1+1degi(gfa+jsoniAj+Bjgi)。移项变形:

degigi=degi+gfa+jsoniAj+Bjgi(degijsoniBj)gi=degi+gfa+jsoniAjgi=degi+jsoniAjdegijsoniBj+gfadegijsoniBj

这样就不用 O(n3) 暴力高消了。所以对于枚举所有集合 T,每个集合 dfs 一遍求出 fT 表示从给定起点开始走到 T 中点的期望步数。预处理 fT(1)|T|1 的 FWT 数组,查询 O(1),总复杂度 O(n2nlogP+q)。稍微有点卡常,求逆元可以改成 exgcd

P4707 重返现世

比较神的题,但是难点不在第一步转化。

xi 表示第 i 种原料出现期望,就是求第 k 小的期望。但是这样只能转成最大,但是我们希望转成最小。所以看成是求第 nk+1 大的期望。下记 k 表示题目中的 nk+1,要求的就是:

T(1)|T|1(|T|1k1)E(miniTxi)

式中最后的期望就是 1iTpi。但是这里 n 开到了 1000,肯定不能枚举子集。把上面的组合数拆开:

T(1)|T|1(|T|1)k1_(k1)!1iTpi

所以可以设 fi,j,k 表示考虑了前 i 个原料,T 的大小为 jiTpik,然后就发现爆了。

k 非常的小。这里有一步很厉害的转化。有组合恒等式:

(nm)=(n1m1)+(n1m)

这样如果 |T| 增加了 1,可以从 k1k 转移。所以设 fi,j,k 表示考虑了 i 个原料,xTpx=j(1)|T|k(|T|1k1) 之和。推一下转移方程:

fi,j+pi,k=(1)|T|k+1(|T|k1)=(1)|T|k(|T|1k1)+(1)|T|k+1(|T|1k2)=fi1,j,k+fi1,j,k1fi,j,k=fi1,j,k

边界是 f0,0,0=1,总复杂度 O(nm(nk))

总结

Min-Max 容斥的题感觉都比较套路,而且大部分都有非常明显的提示,比如 min 好求 max 不好求或者相反。

posted @   WrongAnswer_90  阅读(30)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

This blog has running: 562 days 8 hours 45 minutes 2 seconds

点击右上角即可分享
微信分享提示