【WC2019】数树【子集反演】【结论】【树形dp】【生成函数】【函数求导】【多项式全家桶】

题意:有两棵基于同一点集的树,点集大小为 nnn ,两棵树中有 opopop 棵未确定,可以取所有 nn−2n^{n-2}nn2 种可能。给每个点染上 [1,y][1,y][1,y] 中的一个颜色,要求若 uuuvvv 在两棵树上的路径完全相同,那么 u,vu,vu,v 必须同色。求所有方案数之和 模 998244353998244353998244353

n≤105n\leq 10^5n105

设两棵树的边集为 E1,E2E_1,E_2E1,E2,那么显然答案就是 yn−∣E1∩E2∣y^{n-|E_1\cap E_2|}ynE1E2

我这个都没看出来你信吗

op=0

直接用个 set 模拟即可。

op=1

相当于是给定 E1E_1E1,对所有 E2E_2E2 求答案。

∑E2∈Tree⁡yn−∣E1∩E2∣\sum_{E_2\in \operatorname{Tree}} y^{n-|E_1\cap E_2|}E2TreeynE1E2

其中 Tree⁡\operatorname{Tree}Tree 表示所有构成树的边集的集合。

枚举交集

∑S⊆E1yn−∣S∣∑E2∈Tree⁡[E1∩E2=S]\sum_{S\subseteq E_1}y^{n-|S|}\sum_{E_2\in \operatorname{Tree}}[E_1\cap E_2=S]SE1ynSE2Tree[E1E2=S]

F(S)=∑E2∈Tree⁡[E1∩E2=S]F(S)=\sum_{E_2\in \operatorname{Tree}}[E_1\cap E_2=S]F(S)=E2Tree[E1E2=S]

G(S)=[S⊆E1]∑E2∈Tree⁡[S⊆E2]G(S)=[S \subseteq E_1]\sum_{E_2\in \operatorname{Tree}}[S\subseteq E_2]G(S)=[SE1]E2Tree[SE2]

显然有

G(S)=∑S⊆TF(T)G(S)=\sum_{S\subseteq T}F(T)G(S)=STF(T)

由基本的容斥原理,有

F(S)=∑S⊆T(−1)∣T∣−∣S∣G(T)F(S)=\sum_{S\subseteq T}(-1)^{|T|-|S|}G(T)F(S)=ST(1)TSG(T)

我们设一个

C(S)=∑E2∈Tree⁡[S⊆E2]C(S)=\sum_{E_2\in \operatorname{Tree}}[S\subseteq E_2]C(S)=E2Tree[SE2]

即有多少棵树包含了边集 SSS

那么原式可以写成

∑S⊆E1yn−∣S∣∑S⊆T⊆E1(−1)∣T∣−∣S∣C(T)\sum_{S\subseteq E_1}y^{n-|S|}\sum_{S\subseteq T \subseteq E_1}(-1)^{|T|-|S|}C(T)SE1ynSSTE1(1)TSC(T)

枚举 TTT

∑T⊆E1C(T)∑S⊆Tyn−∣S∣(−1)∣T∣−∣S∣\sum_{T\subseteq E_1}C(T)\sum_{S\subseteq T}y^{n-|S|}(-1)^{|T|-|S|}TE1C(T)STynS(1)TS

接下来这步有点迷惑,不过也有其他等价的推法

∑T⊆E1C(T)yn−∣T∣∑S⊆T(−y)∣T∣−∣S∣\sum_{T\subseteq E_1}C(T)y^{n-|T|}\sum_{S\subseteq T}(-y)^{|T|-|S|}TE1C(T)yn

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值