A. [The 2023 ICPC Asia Macau Regional Contest] Random Tree Parking

给定一棵随机生成 (fa(u)fa(u)[1,u1][1,u-1] 中随机生成) 树, 求满足以下条件的长为 nn 的序列 AA 的个数: 对树染色, 初始为白, 按顺序 i=1ni=1\sim n, 在 AiA_i 中的祖先中找到最深的白色点, 染黑, 不能找不到. n105n\le 10^5.

F(u,i)F(u,i) 表示在以 uu 为根的子树中, 要染黑祖先中 ii 个点的方案数. 初始 F(u)=[1,1,]F(u)=[1,1,\cdots], 转移: $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(\log n) 的, 故时间复杂度 O(nlog2n)O(n\log^2 n).

B. [The 2023 ICPC Asia East Continent Final Contest] Equal Sums

给定 nn 个区间 [Li1,Ri1][L^1_i,R^1_i], mm 个区间 [Li2,Ri2][L^2_i,R^2_i], 对于每个 pn,qmp\le n,q\le m, 求满足条件序列 X,YX,Y 的个数: X=p,Y=q|X|=p,|Y|=q, Xi[Li1,Ri1],Yi[Li2,Ri2]X_i\in [L^1_i,R^1_i],Y_i\in [L^2_i,R^2_i], iXi=iYi\sum_i X_i=\sum_i Y_i. n500n\le 500, 值域 500500.

考虑 DP: F(i,j,x)F(i,j,x) 表示 XX 中前 ii 个, YY 中前 jj 个, X([1,i])Y([1,j])\sum X([1,i])-\sum Y([1,j])xx 的方案数. 但这样值域为 O(n2)O(n^2) 的. 考虑当 x0x\le 0 时加入 Xi+1X_{i+1}, 否则加入 Yj+1Y_{j+1}, 这样值域就是 O(n)O(n) 的. 时间复杂度 O(n3)O(n^3).

C. [ATCoder Tupc 2023] And DNA

给定 n,mn,m, 求长为 nn , 值域为 [1,m][1,m] 的环状序列 AA 满足 i,Ai+(Ai1 bitand Ai+1)=m\forall i,A_i+(A_{i-1}\text{ bitand }A_{i+1})=m. n,m109n,m\le 10^9.

m=0m=0 是简单的. 当 m=1m=1 时, 考虑 DP: F(i,a,b)F(i,a,b) 表示考虑到第 ii 位, Ai=a,Ai1=bA_i=a,A_{i-1}=b 的方案数, 矩阵优化 (设 BB 表示转移矩阵, 答案即为 iBi,in\sum_i B^n_{i,i}). 当 mm 为奇数时, 发现只考虑 AiA_imm 的最低位为 m=1m=1 的情况, 且不进位. 当 mm 为偶数时, 要不所有 AiA_i 的最低位均为 00, 为 m/2m/2 的情况, 要不所有 AiA_i 最低为均为 11, 产生进位, 为 m/21m/2-1 的情况.

时间复杂度 O(logn)O(\log n).