西克
找到满足 \(x\) 的祖先 \(z\) 中满足 \(a_z=b_x\) 的中最靠下的一个。那么正向树上倍增可以求出来 \(Qx\) 到 \(\rm LCA(Qx,Qy)\) 的结果。剩下半边可以一个一个重链跳。在每条重链上先找到第一个 \(a_p\) 等于手上颜色的 \(p\)。预处理一个反向的倍增,跳到下一条重链的接口处
\(\Theta(n\log^2n)\)
尼特
求出来所有串的最大匹配之和除以总方案数
设 \(f_{i,j}\) 表示前 \(i\) 个字符第 \(i\) 个删掉,且和最大匹配差了 \(j\) 的方案数。同时设 \(g_{i,j}\) 表示在相同条件下前 \(i\) 个数字的最大匹配数之和。
转移需要分 \(S_{i}=S_{i+1}\) 和 \(S_{i}\neq S_{i+1}\) 讨论。不难发现 \(S_i\) 具体值不重要,于是都可以叠到一起做。或者说能快速幂,具体而言:
-
若 \(S_i=S_{i+1}\)
选择 \(T_i=S_i\) 或者 \(T_{i}\neq S_i\) 不会改变第二维。如果选择相同会使得最大匹配加一,从而 \(g_{i,j}+\leftarrow f_{i,j}\) 。\(f\) 的转移有 \(m-1\) 的系数
-
若 \(S_{i}\neq S_{i+1}\)
\(T_i=S_i\) 会让 \(j\) 减少,如果 \(j\) 本身是 \(0\) 会使得最大匹配增加
\(T_i=S_{i+1}\) 会让最大匹配增加
\(T_{i}\neq S_{i+1},S_{i}\) 时最大匹配不变,\(f\) 的转移有 \(m-2\) 的系数
前者转移统一移后做,第二部分转移写乘 \(GF\) 之后可以短多项式快速幂得到 \(G\) 。前者是等比数列求和。
苯为
长度为 \(n\) 的环染 \(k\) 中颜色的方案数是 \((k-1)^n+(-1)^{n}(k-1)\)
这题本身是求出来树上长度为 \(i\) 的链的数量,将它们连成长度为 \((A+1)i\) 的环染色,剩下的点染 \((k-1)\) 种颜色。不过这个过程相当于给边带了权,那么设 \(f_{i}\) 表示 \(i\) 子树中所有到 \(i\) 的链的权值总和,在 \(\rm LCA\) 处合并两份权值即可。