题意
给你大小为
n1,n2的两棵树
T1,T2,构造一张新图,该图中每一个点的编号为
(u,v)。如果在
T1
中,
u1
和u2
之间有边,那么在该图上,对于任意
1≤v≤n2,(u1,v)
和
(u2,v)
之间有边。同样,如果在
T2
中,v1
和v2之间有边,那么在图上,对于任意
1≤u≤n1,(u,v1)
和
(u,v2)
之间有边
求这个图上长度为
K
的环有多少个,环可以不为简单环,起始点或方向不同的环视为不同的环
n1,n2≤4000,K≤75,答案对
998244353
取模.
题解
T1
上一个长度为
K1
的环和
T2
上一个长度为
K2
的环以不同方式组合对应图上
(K1+K2k1)
个环
即答案为
0≤i≤K∑F1i×F2K−i×(Ki),其中
F1i
表示
T1
上长度为
i
的环的个数,F2i
表示
T2
上长度为
i
的环的个数
我们把每个点作为起始点分别计算,考虑到树上所有的环长度均为偶数,令
fu,k
表示以
u
为起始点,长度为
2×k
的环的个数,有
F2×k=u∑fu,k
由于从父亲节点往儿子节点转移十分困难,不妨对于每个点只考虑在其子树中的环然后换根DP
考虑转移
fu,k=0≤t<k∑fu,tv∈sonu∑fv,k−t−1
令
hu,k=v∈sonu∑fv,k−t−1,有
fu,k=0≤t<k∑fu,t×hu,k−t−1
换根DP维护
h,再通过
h
计算
f
Θ((n1+n2)×K2)
足以通过此题
代码 codeforces
submission 143516835
优化
复杂度瓶颈在
f
的计算,考虑优化这一过程
令
hu,k′=hu,k−1,有
fu,k=0≤t<k∑fu,t×hu,k−t′
令
Gu(x)=∑1≤i≤khu,i′×xi,有
fu,k=[xk]1≤i≤k∑Gu(x)i=[xk]Gu(x)−1Gu(x)k+1−Gu(x)
多项式快速幂和求逆可以做到
Θ((n1+n2)KlogK)
的复杂度