CF997D Cycles in product

题意

给你大小为 n1,n2n_1, n_2​的两棵树 T1,T2T_1, T_2​,构造一张新图,该图中每一个点的编号为 (u,v)(u,v)。如果在 T1T_1 ​中, u1u_1 ​和u2u_2 ​之间有边,那么在该图上,对于任意 1≤v≤n21\le v\le n_2,(u1,v)(u_1, v) 和 (u2,v)(u_2, v) 之间有边。同样,如果在 T2T_2 ​中,v1v_1 ​和v2v_2​之间有边,那么在图上,对于任意 1≤u≤n11\le u\le n_1,(u,v1)(u, v_1) 和 (u,v2)(u, v_2) 之间有边
求这个图上长度为 KK 的环有多少个,环可以不为简单环,起始点或方向不同的环视为不同的环

n1,n2≤4000,K≤75n_1, n_2\le 4000, K\le 75,答案对 998244353998244353 取模.

题解

T1T_1 上一个长度为 K1K_1 的环和 T2T_2 上一个长度为 K2K_2 的环以不同方式组合对应图上 (K1+K2k1)\begin{pmatrix}K_1+K_2\\k_1\end{pmatrix} 个环
即答案为 ∑0≤i≤KF1i×F2K−i×(Ki)\sum\limits_{0\le i\le K}F1_i\times F2_{K-i}\times\begin{pmatrix}K\\i\end{pmatrix},其中 F1iF1_i 表示 T1T_1 上长度为 ii 的环的个数,F2iF2_i 表示 T2T_2 上长度为 ii 的环的个数

我们把每个点作为起始点分别计算,考虑到树上所有的环长度均为偶数,令 fu,kf_{u, k} 表示以 uu 为起始点,长度为 2×k2\times k 的环的个数,有 F2×k=∑ufu,kF_{2\times k}=\sum\limits_u f_{u, k}
由于从父亲节点往儿子节点转移十分困难,不妨对于每个点只考虑在其子树中的环然后换根DP

考虑转移
fu,k=∑0≤t<kfu,t∑v∈sonufv,k−t−1 f_{u,k}=\sum_{0\le t<k}f_{u,t}\sum_{v\in \text{son}_u}f_{v,k-t-1} 令 hu,k=∑v∈sonufv,k−t−1h_{u,k}=\sum\limits_{v\in \text{son}_u}f_{v,k-t-1},有
fu,k=∑0≤t<kfu,t×hu,k−t−1 f_{u,k}=\sum_{0\le t<k}f_{u,t}\times h_{u, k-t-1} 换根DP维护 hh,再通过 hh 计算 ff
Θ((n1+n2)×K2)\Theta((n_1+n_2)\times K^2) 足以通过此题

代码 codeforces submission 143516835

优化

复杂度瓶颈在 ff 的计算,考虑优化这一过程

令 hu,k′=hu,k−1h'_{u,k}=h_{u,k-1},有 fu,k=∑0≤t<kfu,t×hu,k−t′ f_{u,k}=\sum_{0\le t<k}f_{u,t}\times h'_{u,k-t} 令 Gu(x)=∑1≤i≤khu,i′×xiG_u(x)=\sum_{1\le i\le k}h'_{u,i}\times x^i,有 fu,k=[xk]∑1≤i≤kGu(x)i=[xk]Gu(x)k+1−Gu(x)Gu(x)−1 \begin{aligned}f_{u,k}&=[x^k]\sum_{1\le i\le k}G_u(x)^i\\&=[x^k]\frac{G_u(x)^{k+1}-G_u(x)}{G_u(x)-1}\end{aligned} 多项式快速幂和求逆可以做到 Θ((n1+n2)Klog⁡K)\Theta((n_1+n_2)K\log K) 的复杂度

CF997D Cycles in product

https://gzezfisher.top/cf997d/

作者

Fisher Cai

发布于

2022-01-26

更新于

2025-07-22

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×