zoukankan      html  css  js  c++  java
  • P2414 [NOI2011] 阿狸的打字机

    P2414 [NOI2011] 阿狸的打字机

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

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

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

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

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

    然后就没有了。

  • 相关阅读:
    【Golang基础总结】数组和切片的比较
    如何转载别人的文章
    C语言字节对齐问题详解
    幷查集拓展
    贪心
    dfs
    Trie
    哈夫曼树
    bfs
    并查集
  • 原文地址:https://www.cnblogs.com/Akmaey/p/14678473.html
Copyright © 2011-2022 走看看