题解 [WC2019] 数树

题意

对于两棵树 T 1 , T 2 T_1,T_2 T1,T2 (编号都是 1 ∼ n 1\sim n 1n),我们给每个点染一个 [ 1 , y ] [1,y] [1,y] 之间的一个整数,如果两个点 p , q p,q p,q 之间的路径序列在两棵树上都一样,那么它们必须被赋予相同颜色。不妨设其为 w ( T 1 , T 2 ) w(T_1,T_2) w(T1,T2)

问题 0:给定 T 1 , T 2 T_1,T_2 T1,T2,求 w ( T 1 , T 2 ) w(T_1,T_2) w(T1,T2)

问题 1:给定 T 1 T_1 T1,求 ∑ T 2 w ( T 1 , T 2 ) \sum_{T_2} w(T_1,T_2) T2w(T1,T2)

问题 2:求 ∑ T 1 , T 2 w ( T 1 , T 2 ) \sum_{T_1,T_2} w(T_1,T_2) T1,T2w(T1,T2)

答案对 998244353 998244353 998244353 取模。

数据范围: 3 ≤ n ≤ 1 0 5 , 1 ≤ y < 998244353 3\le n\le 10^5, 1\le y<998244353 3n105,1y<998244353

问题 0

稍微看看就可以发现问题等价于
y n − ∣ E 1 ∩ E 2 ∣ y^{n-|E_1\cap E_2|} ynE1E2
其中 E 1 ∩ E 2 E_1\cap E_2 E1E2 是边的交。

问题 1

y n ∑ T 2 y − ∣ E 1 ∩ E 2 ∣ = y n ∑ S y − ∣ S ∣ ∑ T 2 [ S = E 1 ∩ E 2 ] y^n \sum_{T_2} y^{-|E_1\cap E_2|}=y^n \sum_S y^{-|S|} \sum_{T_2} [S=E_1\cap E_2] ynT2yE1E2=ynSyST2[S=E1E2]

F ( S ) = ∑ T 2 [ S = E 1 ∩ E 2 ] F(S)=\sum_{T_2} [S=E_1\cap E_2] F(S)=T2[S=E1E2],我们考虑作出 G ( S ) = ∑ T 2 [ S ⊆ E 2 ] G(S)=\sum_{T_2} [S\subseteq E_2] G(S)=T2[SE2],则
G ( S ) = ∑ S ⊆ T F ( T ) G(S)=\sum_{S\subseteq T} F(T) G(S)=STF(T)
使用容斥 [ 1 ] ^{[1]} [1]得到
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)
于是
y n ∑ S ⊆ T 1 y − ∣ S ∣ ∑ S ⊆ T ( − 1 ) ∣ T ∣ − ∣ S ∣ G ( T ) = y n ∑ T ⊆ T 1 ( − 1 ) ∣ T ∣ G ( T ) ∑ S ⊆ T ( − y ) − ∣ S ∣ = y n ∑ T ⊆ T 1 ( − 1 ) ∣ T ∣ G ( T ) ∑ k ( ∣ T ∣ k ) ( − 1 y ) k = y n ∑ T ⊆ T 1 ( 1 y − 1 ) ∣ T ∣ G ( T ) y^n\sum_{S\subseteq T_1} y^{-|S|} \sum_{S\subseteq T} (-1)^{|T|-|S|} G(T) \\ = y^n \sum_{T\subseteq T_1} (-1)^{|T|} G(T) \sum_{S\subseteq T} (-y)^{-|S|} \\ = y^n \sum_{T\subseteq T_1} (-1)^{|T|} G(T) \sum_{k} \binom{|T|}{k} (-\frac{1}{y})^k \\ = y^n \sum_{T\subseteq T_1} (\frac{1}{y}-1)^{|T|} G(T) ynST1ySST(1)TSG(T)=ynTT1(1)TG(T)ST(y)S=ynTT1(1)TG(T)k(kT)(y1)k=ynTT1(y11)TG(T)
一个基于 prufer 序的知名结论 [ 2 ] ^{[2]} [2]给出
G ( T ) = n k − 2 ∏ i = 1 k a i G(T)=n^{k-2} \prod_{i=1}^k a_i G(T)=nk2i=1kai
于是原式化为
y n n 2 ∑ T ⊆ T 1 ( 1 y − 1 ) ∣ T ∣ ∏ i = 1 k ( n a i = y n n 2 ∑ T ⊆ T 1 ( 1 y − 1 ) n − k ∏ i = 1 k n a i = ( 1 − y ) n n 2 ∑ T ⊆ T 1 ∏ i = 1 k ( y 1 − y n a i ) \frac{y^n}{n^2} \sum_{T\subseteq T_1} (\frac{1}{y}-1)^{|T|} \prod_{i=1}^k(na_i \\ = \frac{y^n}{n^2} \sum_{T\subseteq T_1} (\frac{1}{y}-1)^{n-k} \prod_{i=1}^k na_i \\ = \frac{(1-y)^n}{n^2} \sum_{T\subseteq T_1} \prod_{i=1}^k (\frac{y}{1-y}na_i) \\ n2ynTT1(y11)Ti=1k(nai=n2ynTT1(y11)nki=1knai=n2(1y)nTT1i=1k(1yynai)
我们使用树上背包来解决这个问题,设 d p ( u , i ) dp(u,i) dp(u,i) 表示考虑 u u u 的子树, u u u 所在连通块大小为 i i i,不算上当前连通块的贡献,一开始 f ( u , 1 ) = 1 f(u,1)=1 f(u,1)=1,其余的都是 0,则每次转移:
d p ( u , i ) ← f ( u , i ) ∑ j y n 1 − y j f ( v , j ) + ∑ j f ( v , j ) f ( u , i − j ) dp(u,i)\leftarrow f(u,i)\sum_j \frac{yn}{1-y} j f(v,j)+\sum_j f(v,j)f(u,i-j) dp(u,i)f(u,i)j1yynjf(v,j)+jf(v,j)f(u,ij)
做出每个点的 dp 生成函数,那么
F u ( x ) ← F u ( x ) y n 1 − y F v ′ ( 1 ) + F u ( x ) F v ( x ) F_u(x)\leftarrow F_u(x) \frac{yn}{1-y} F_v'(1)+F_u(x)F_v(x) Fu(x)Fu(x)1yynFv(1)+Fu(x)Fv(x)
记录每个生成函数的开销太大,但我们考虑最后我们问的是 y n 1 − y F v ′ ( 1 ) \frac{yn}{1-y}F_v'(1) 1yynFv(1),所以我们不妨考虑每个点上这个值的变化:
F u ′ ( 1 ) ← y n 1 − y F v ′ ( 1 ) F u ′ ( 1 ) + F u ( 1 ) F v ′ ( 1 ) + F v ( 1 ) F u ′ ( 1 ) F_u'(1)\leftarrow \frac{yn}{1-y} F_v'(1)F_u'(1)+F_u(1)F_v'(1)+F_v(1)F_u'(1) Fu(1)1yynFv(1)Fu(1)+Fu(1)Fv(1)+Fv(1)Fu(1)
记录每个点的 F u ( 1 ) , F u ′ ( 1 ) F_u(1),F_u'(1) Fu(1),Fu(1),那么总体可以 O ( n ) O(n) O(n) 树上 dp 将其求出。

问题 2

y n ∑ T 1 ∑ T ⊆ T 1 ( 1 y − 1 ) ∣ T ∣ G ( T ) = y n ∑ T ( 1 y − 1 ) ∣ T ∣ G ( T ) 2 = y n ∑ T ( 1 y − 1 ) ∣ T ∣ n 2 k − 4 ∏ i = 1 k a i 2 = ( 1 − y ) n n 4 ∑ T ∏ i = 1 k ( y 1 − y ) ( n a i ) 2 y^n \sum_{T_1} \sum_{T\subseteq T_1} (\frac{1}{y}-1)^{|T|} G(T) \\ =y^n \sum_T (\frac{1}{y}-1)^{|T|} G(T)^2 \\ = y^n \sum_T (\frac{1}{y}-1)^{|T|} n^{2k-4} \prod_{i=1}^k a_i^2 \\ = \frac{(1-y)^n}{n^4} \sum_T \prod_{i=1}^k (\frac{y}{1-y})(na_i)^2 ynT1TT1(y11)TG(T)=ynT(y11)TG(T)2=ynT(y11)Tn2k4i=1kai2=n4(1y)nTi=1k(1yy)(nai)2

设一个 T T T 的生成函数
F ( x ) = ( y 1 − y ) n 2 ∑ i ≥ 1 i i i ! x i F(x)=(\frac{y}{1-y}) n^2 \sum_{i\ge 1} \frac{i^i}{i!} x^i F(x)=(1yy)n2i1i!iixi
则答案是
( 1 − y ) n n 4 [ x n ] n ! exp ⁡ F ( x ) \frac{(1-y)^n}{n^4} [x^n] n! \exp F(x) n4(1y)n[xn]n!expF(x)
一遍 exp 即可求出,复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

注释

[1] 容斥

结论

已知全集 Ω \Omega Ω,若对所有子集 S S S 都有

G ( S ) = ∑ S ⊆ T ⊆ Ω F ( T ) G(S)=\sum_{S\subseteq T\subseteq \Omega} F(T) G(S)=STΩF(T)

则对所有子集 T T T 都有

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

证明

∑ S ⊆ T ⊆ Ω ( − 1 ) ∣ T ∣ − ∣ S ∣ G ( T ) = ∑ S ⊆ K ⊆ Ω F ( K ) ∑ S ⊆ T ⊆ K ( − 1 ) ∣ T ∣ − ∣ S ∣ = ∑ S ⊆ K ⊆ Ω F ( K ) ∑ k ≥ 0 ( ∣ K ∣ − ∣ S ∣ k ) ( − 1 ) k = ∑ S ⊆ K ⊆ Ω F ( K ) [ K = S ] = F ( S ) \sum_{S\subseteq T\subseteq \Omega} (-1)^{|T|-|S|}G(T) =\sum_{S\subseteq K\subseteq \Omega} F(K) \sum_{S\subseteq T\subseteq K} (-1)^{|T|-|S|} \\ = \sum_{S\subseteq K\subseteq \Omega} F(K) \sum_{k\ge 0} \binom{|K|-|S|}{k} (-1)^k=\sum_{S\subseteq K\subseteq \Omega} F(K)[K=S] \\=F(S) STΩ(1)TSG(T)=SKΩF(K)STK(1)TS=SKΩF(K)k0(kKS)(1)k=SKΩF(K)[K=S]=F(S)

[2] 知名结论

结论

点有标号,将有 k k k 个连通块(大小分别是 a 1 , a 2 , ⋯   , a k , ∑ a i = n a_1,a_2,\cdots,a_k,\sum a_i=n a1,a2,,ak,ai=n)的森林连成一个树的方案数为

n k − 2 ∏ i = 1 k a i n^{k-2} \prod_{i=1}^k a_i nk2i=1kai

证明

第一步转化:考虑一个大小为 k k k 的有标号树,设第 i i i 个点的度为 d i d_i di,让每个点代表原来的一个连通块,则这 d i d_i di 个度任意分配,所以每个这样的树都对答案贡献

∏ i = 1 k a i d i \prod_{i=1}^k a_i^{d_i} i=1kaidi

第二步转化:考虑 prufer 序与树一一对应,而数组是 prufer 序的充要条件是:大小为 k − 2 k-2 k2,值域为 [ 1 , k ] [1,k] [1,k]。且我们知道 d i = c i + 1 d_i=c_i+1 di=ci+1 c i c_i ci i i i 在 prufer 序中出现的次数。所以每个这样的 prufer 序都对答案贡献:

∏ i = 1 k a i c i + 1 \prod_{i=1}^k a_i^{c_i+1} i=1kaici+1

现在设出每个数的 EGF:

∑ j ≥ 0 a i j j ! x j = e a i x \sum_{j\ge 0} \frac{a_i^j}{j!} x^j = e^{a_ix} j0j!aijxj=eaix

那么答案是

( k − 2 ) ! ∏ i = 1 k a i [ x k − 2 ] ∏ i = 1 k e a i x = n k − 2 ∏ i = 1 k a i (k-2)! \prod_{i=1}^k a_i [x^{k-2}]\prod_{i=1}^k e^{a_ix}=n^{k-2} \prod_{i=1}^k a_i (k2)!i=1kai[xk2]i=1keaix=nk2i=1kai

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值