
AC自动机
ylsoi
这个作者很懒,什么都没留下…
展开
-
[bzoj2938][Poi2000]病毒——AC自动机
题目大意: 给定n个01串,求是否存在一个长度无穷的01串使得这个01串不包含任何一个给定的串。 思路: 考虑AC自动机匹配的过程是在Trie树上不停地跳,那么如果我们可以找到一个串使得这个串可以一直在Trie上跳并且永远跳不到匹配节点就说明可行。 可以发现这样的话这个串在AC自动机上的匹配一定是会出现环的,于是我们直接dfs找环就好了。 考虑如何判断这个节点是否可以走到,即这个节点以及这个节点的...原创 2018-12-26 19:43:48 · 212 阅读 · 0 评论 -
[bzoj2434][Noi2011]阿狸的打字机——AC自动机
题目大意: 给定n个字符串,每次询问第x个字符串在第y个字符串中出现了多少次。 思路: 显然我们需要先把AC自动机给建出来。 考虑如何最暴力地计算第x个字符在第y个字符中出现了多少次,我们可以在Trie上暴力跳y的每一个节点,然后对于y的每一个节点跳fail,如果跳到了x串的结尾,那么答案+1。 这样对于每一个节点都跳fail显然复杂度无法接受,那么换一个角度考虑,x的结尾可以被y串上的多少个节点...原创 2018-12-26 21:52:55 · 145 阅读 · 0 评论 -
[bzoj3172][Tjoi2013]单词——AC自动机
题目大意: 某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。 思路: 第i个单词在整个文章中出现了多少次即i串的结尾可以被多少个串的节点给跳到。 于是吧fail看成每个节点唯一的父亲,每个节点的权值为有多少个单词的前缀经过了它,然后直接统计子树内的权值和即可。 #include<bits/stdc++.h> #de...原创 2018-12-27 15:33:10 · 221 阅读 · 0 评论 -
[bzoj1030][JSOI2007]文本生成器——AC自动机+动态规划
题目大意: 给定n个给定的串,求有多少个串满足存在给定的串是这个串的子串。 思路: 直接计算存在的不太好算,考虑反面计数,计算有多少个串找不到匹配。 那么当我们把AC自动机给建出来之后,不难发现一个满足要求的串会一直在AC自动机上面跳并且到不了已经匹配上的节点,于是问题便转化成了有向图的路径计数。 考虑DP,记dp[i][j]表示走了i步走到了第j个节点,每一个点枚举下一个字符是什么,直接在AC自...原创 2018-12-27 19:06:43 · 331 阅读 · 0 评论 -
bzoj4231回忆树——AC自动机
bzoj4231 回忆树 给定一颗Trie树,每次询问u到v的路径上构成的字符串包含了给定模式串T多少次。 思路 考虑离线之后对于所有的模式串建立AC自动机,考虑跨过lca的串范围有限,直接暴力kmp即可。 然后我们就将一次询问拆成了两条链了,可以将每次询问挂在链上然后离线去dfs,每次dfs时将这个节点添加进AC自动机匹配,对于一段u到v的链,我们在链头的某一个位置减去之前不合法的匹配数量,再在...原创 2019-07-02 20:18:46 · 618 阅读 · 0 评论