首先根据题意模拟可以建出 AC 自动机。
然后我们发现,对于每一个询问 ((x,y)) ,对于 AC 自动机来说,其实就是在询问在 Fail 树上以 (x) 为根的子树内,有多少个 (y) 的前缀的标记。
解释一下为什么:因为一个结点 (x) 的子节点中有 (y) ,就代表 (x) 在 (y) 中出现过。
然后那就很简单了,我们直接离线询问,然后建出 Fail 树 和 Trie 树,因为要查子树内的权值和,所以我们在 Fail 树上跑 (dfn) 序,并统计子树 (siz) 。
然后我们在 Trie 树上 dfs ,通过树状数组统计答案,也就是每次来的时候加上这个点的贡献,回溯的时候删去,如果当前这个点有结尾标记,那么处理一下当前这个点作为询问中的 (y) 的询问(即把那些对应的 (x) 取出来询问一下子树和)。
然后就没有了。