对于每新增的一条边权为 的路径 ,我们尝试用其去更新 矩阵的值。
具体的,枚举 ,有:
复杂度 。
设 表示考虑到 的前 个字符且 匹配到 的第 个字符的情况下 的出现次数。预处理出 表示在匹配到 的第 个字符的情况下在添加一个 字符可以匹配到 的第几个字符。使用 KMP 预处理即可,进而可以直接转移。
发现其实质上为自动机 DP,内层自动机为 KMP 自动机。
复杂度为 。
我们考虑对被限制相同的字符连边,那么合法的构造即为使得建出的图为联通图。
首先考虑 时如何处理,发现对于所有 ,若我们可以使得连通块 与连通块 联通,那么我们即可构造出有解方案,进而我们考虑连边 ,并依次为回文串边界继续建边 ,进而可以得到形如下图的构造,可以发现其一定有解。

通过上述分析我们可以得到,对于一个长度为 的回文串,我们在其端点处添加 的限制即可使得其元素均相同。下面我们考虑如何扩展到 的情况,一个直观的想法是我们令 序列为 。发现这样构造其实是通过一个长度为 的小回文串使得其相同的。但是这样难于扩展到 更大的情况,我们考虑另一种构造。
首先我们取 ,接下来我们不妨删去字符串的前 个字符,因此我们只需要使得剩余的字符均相同那么即可得到一组合法的构造,那么我们现在的 序列实际上为 发现其与上述 情况时的 序列相似,因此我们取 即可构造出一组合法方案。

考虑扩展到 的情况。我们继续使用上述删除前缀的思想,那么问题转化为了 的情况,另外我们还要求 。
我们考虑有解的必要条件,即至少存在 条边,否则一定无解。
已知 数组已经贡献了 条边,而可以发现 至多贡献 条边,因此若 为奇数,那么我们至多有 条边,因此我们在这里只考虑 为偶数的情况,后文会证明其他情况一定无解。现在我们已经限制了 为偶数,不难发现若 那么一定合法。因此若 中不存在超过两个奇数,我们将这些奇数放到 或 的位置上,剩余部分按上述方法处理即可。
进而我们得到了一组合法的构造方式,对于 ,令 ,并且 。

发现我们仅剩下了 多与两个奇数的情况未考虑,我们可以发现若 中存在多于两个奇数,那么我们一定无法得到 条边,进而一定无解。
复杂度为 。
发现若存在度数不小于 的节点,那么路径条数关于路径长度是指数级别的,考虑 DP 求解,设 以 结尾,长度为 的路径条数,根据上述分析,该 DP 复杂度为 。
若不存在度数不小于 的节点,那么图中的各个连通块只有孤立点和长度为 的链两种。前者的贡献为常数,后者的贡献关于路径条数为一次函数,因此总路径数为关于长度的一次函数,直接求解即可。
复杂度为 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?