做题记录 25.9.29
\(\textcolor{black}\odot\) CF1110H Modest Substrings
考虑一个暴力的实现:用 \(l\sim r\) 构成的字符串建立 \(\text{AC}\) 自动机,转化为在自动机上求出一条路径使得经过的点权之和最大,其中点权为 \(\text{fail}\) 树上该点到根的路径上字符串数量
显然暴力建树会形成若干满十叉树,考虑去掉这些满十叉树,剩下的结点数量可以接受
令 \(g_{u,i}\) 表示根为结点 \(u\) 在 \(\text{fail}\) 树上的祖先,深度为 \(i\)(根深度为 \(0\))的满十叉树数量,容易在计算 \(\text{fail}\) 的过程中一同计算,这部分时间复杂度 \(O(|r|\omega^2+|r|\omega n)\),其中 \(\omega=10\)
令 \(f_{u,i}\) 表示从根出发,长度为 \(i\) 的字符串最大权值总和,则转移为
\[f_{\delta(u,v),i+1}\gets f_{u,i}+\sum g_{\delta(u,v),0\sim n-i-1}
\]
其中 \(\delta\) 为 \(\text{ACAM}\) 的转移函数
为了保证字典序最小,可以逆序转移或求出 \(f\) 中最优转移的 \(\text{DAG}\) 然后顺序扫描
总时间复杂度 \(O(|r|\omega^2n)\)

浙公网安备 33010602011771号