【题解】CF1574F Occurrences 图论、自然根号、DP

题目链接

对于每个串 \(A_i\) 最严格的限制即 \(A_i\) 中所有出现的字符的出现次数等于串 \(A_i\) 出现的次数。

即若 \(A_{i,j}\) 在构造的序列中出现,前面必须是 \(A_{i,j-1}\) 后面必须是 \(A_{i,j+1}\)

考虑构造一张有向图,对于每个串 \(A_i\) 连边 \(A_{i,j-1} \to A_{i,j}\)

如果我们构造的序列中包含元素 \(q\) ,那么 \(q\) 的前驱后继个数一定小于等于 \(1\)

可以发现,我们最后选的一定是该有向图中的若干条链。

那么直接遍历每个弱连通块即可(注意处理重边、自环。)。

\(cnt_i\) 为长度为 \(i\) 的链的条数。

因为 \(\sum_{i=1}^{\sqrt{n}}i=O(n)\) 。 所以长度不同的链的个数是 \(O(\sqrt{k})\) 级别的。

直接背包复杂度为 \(O(m\sqrt{k})\)

代码记录

posted @ 2021-09-29 11:32  Themaxmaxmax  阅读(33)  评论(0编辑  收藏  举报