A. [The 2023 ICPC Asia Macau Regional Contest] Random Tree Parking
给定一棵随机生成 (fa(u) 在 [1,u−1] 中随机生成) 树, 求满足以下条件的长为 n 的序列 A 的个数: 对树染色, 初始为白, 按顺序 i=1∼n, 在 Ai 中的祖先中找到最深的白色点, 染黑, 不能找不到. n≤105.
F(u,i) 表示在以 u 为根的子树中, 要染黑祖先中 i 个点的方案数. 初始 F(u)=[1,1,⋯], 转移: $F'(u,i-1)\gets \sum_j F(u,j-1)F(v,i-j)\frac{(i+siz(u)+j+siz(v))!}{(i+siz(u))!(j+siz(v))!}$.
用该方式随机的树, 树高为 O(logn) 的, 故时间复杂度 O(nlog2n).
B. [The 2023 ICPC Asia East Continent Final Contest] Equal Sums
给定 n 个区间 [Li1,Ri1], m 个区间 [Li2,Ri2], 对于每个 p≤n,q≤m, 求满足条件序列 X,Y 的个数: ∣X∣=p,∣Y∣=q, Xi∈[Li1,Ri1],Yi∈[Li2,Ri2], ∑iXi=∑iYi. n≤500, 值域 500.
考虑 DP: F(i,j,x) 表示 X 中前 i 个, Y 中前 j 个, ∑X([1,i])−∑Y([1,j]) 为 x 的方案数. 但这样值域为 O(n2) 的. 考虑当 x≤0 时加入 Xi+1, 否则加入 Yj+1, 这样值域就是 O(n) 的.
时间复杂度 O(n3).
C. [ATCoder Tupc 2023] And DNA
给定 n,m, 求长为 n , 值域为 [1,m] 的环状序列 A 满足 ∀i,Ai+(Ai−1 bitand Ai+1)=m. n,m≤109.
m=0 是简单的. 当 m=1 时, 考虑 DP: F(i,a,b) 表示考虑到第 i 位, Ai=a,Ai−1=b 的方案数, 矩阵优化 (设 B 表示转移矩阵, 答案即为 ∑iBi,in). 当 m 为奇数时, 发现只考虑 Ai 和 m 的最低位为 m=1 的情况, 且不进位. 当 m 为偶数时, 要不所有 Ai 的最低位均为 0, 为 m/2 的情况, 要不所有 Ai 最低为均为 1, 产生进位, 为 m/2−1 的情况.
时间复杂度 O(logn).