P2414 [NOI2011] 阿狸的打字机

P2414 [NOI2011] 阿狸的打字机

首先根据题意模拟可以建出 AC 自动机。

然后我们发现,对于每一个询问 \((x,y)\) ,对于 AC 自动机来说,其实就是在询问在 Fail 树上以 \(x\) 为根的子树内,有多少个 \(y\) 的前缀的标记。

解释一下为什么:因为一个结点 \(x\) 的子节点中有 \(y\) ,就代表 \(x\)\(y\) 中出现过。

然后那就很简单了,我们直接离线询问,然后建出 Fail 树 和 Trie 树,因为要查子树内的权值和,所以我们在 Fail 树上跑 \(dfn\) 序,并统计子树 \(siz\)

然后我们在 Trie 树上 dfs ,通过树状数组统计答案,也就是每次来的时候加上这个点的贡献,回溯的时候删去,如果当前这个点有结尾标记,那么处理一下当前这个点作为询问中的 \(y\) 的询问(即把那些对应的 \(x\) 取出来询问一下子树和)。

然后就没有了。

posted @ 2021-04-19 20:03  __Anchor  阅读(46)  评论(0编辑  收藏  举报