做题记录 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)\)

代码

参考

posted @ 2025-09-30 22:51  Hstry  阅读(5)  评论(0)    收藏  举报