
后缀自动机
hanyuweining
明日はきっと 明日はきっと 仆が世界の中心なので
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BZOJ2555 Substring
传送门 样例毒瘤 强制在线毒瘤( 做法比较显然啦 我们需要维护一个SAM 并资磁查询子树大小 由于强制在线 所以就需要LCT咯 查询子树大小我们可以变成链加+单点查询 然后匹配过程就和ACA的跳跳跳一样啦 decode这个地方真的坑 mask要设局部变量 附代码。 #include<cstdio> #include<cstring> #include&l...原创 2018-12-20 08:54:26 · 172 阅读 · 0 评论 -
BZOJ 4516 [Sdoi2016] 生成魔咒
传送门 心态崩了++ 后缀自动机板子题[考场上要是不会后缀自动机就崩了T^T] 可以看出 每次答案的贡献就是和原来本质不同的子串数量 根据SPOJ7258我们可以得到 本质不同的子串数量可以通过建出自动机 树形dp解决 我们需要知道的就是 连向它的那个链 就是我们建立自动机的时候的那个找的p 直接求一下就好了 另外的理解方式就是我们要求本质不同的前缀数量 那么就是parent树上l...原创 2018-12-18 15:36:20 · 141 阅读 · 0 评论 -
SPOJ7258 SUBLEX - Lexicographical Substring Search
传送门[洛谷] 心态崩了我有妹子 靠 我写的记忆化搜索 莫名WA了 然后心态崩了 当我正要改成bfs排序的时候 我灵光一动 md我写的i=0;i<25;i++??? 然后 改过来就A掉了T^T 大体做法就是 一个点出发的本质不同子串数量应该是就是所有添加字符的转移和其余选一个空串的转移 所以直接建出自动机然后 我的做法是直接记忆化搜索就可以省去建树/排序 因为所有子串必定由转移构...原创 2018-12-18 13:20:51 · 210 阅读 · 0 评论 -
SPOJ1812 LCS2 - Longest Common Substring II
传送门[洛谷] 多个串!1811的升级版~ 其实做法很相似 我们只需要对第一个串建立SAM 然后 每个串在上面跑 由于是求所有字符串交的LCS 我们只需要记录每个节点与当前串匹配的max和之前所有串匹配的min max是需要子树更新的 min要记得和当前的max还有len[节点最大长度]取min 然后这样就做完啦。 (才不会说我读的是所有字符串并的LCS 这个的做法可以直接跑一个然后...原创 2018-12-18 09:49:15 · 201 阅读 · 0 评论 -
SPOJ1811 LCS - Longest Common Substring
传送门[洛谷] SAM板子题?(可惜我还是不会) 大概就是能匹配就一直往下匹配 不能匹配就跳parent 调到能匹配为止 跳到根了就重新开始 最开始太蠢了非要写递归版 写着写着发现不知道我要写啥了T^T 果断换循环。。 #include<cstdio> #include<cstring> #include<algorithm> #include<...原创 2018-12-18 08:04:54 · 294 阅读 · 0 评论 -
SPOJ8222 NSUBSTR - Substrings
传送门[洛谷] SAM模板题 可惜我不会 本来想大力上线段树的 然后发现题解的做法非常精妙 因为 很显然长度为i的字符串出现长度一定>=长度为i+1的字符串 [作为子串出现就可以取到=] 那么直接记录最后倒着更新一遍就可以啦 附代码。 #include<cstdio> #include<cstring> #include<algorithm...原创 2018-12-17 19:36:50 · 115 阅读 · 0 评论 -
洛谷3804 【模板】后缀自动机
传送门 真·玄学 还是没有完全搞懂SAM的性质啥的啊T^T 我本来以为SAM会很长的没想到这么短 这个题就是建出SAM 然后建树求出right然后*len[max]直接取max即可啦 学习笔记什么的等等吧[鸽了我也不管] 附代码。 #include<cstdio> #include<cstring> #include<algorithm> ...原创 2018-12-17 16:29:25 · 248 阅读 · 0 评论 -
BZOJ5261 Rhyme
传送门 广义后缀自动机= =+ 跟ptx大爷的博客学的 戳我传送 我写的第一种 建立Trie树的写法 bfs建立SAM 为什么是bfs呢 我也不知道(GG) 经过我一番抱大腿+询问 各位大爷说的原因是 因为dfs时间复杂度不对 多有道理哦 【摔 不过好像这个复杂度保证好像真的不大准确2333 所以 安安心心bfs就最吼啦 复杂度貌似是trie的大小 其实 每次重置last为rt也可...原创 2018-12-22 12:07:30 · 204 阅读 · 0 评论 -
BZOJ4698 Sdoi2008 Sandy的卡片
传送门 转化题意可以得到 我们求得就是 所有串的差分串的LCS SAM水过就好啦 #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #define inf 20021225 #define ll long lon...原创 2018-12-21 11:16:08 · 146 阅读 · 1 评论 -
BZOJ1396 识别子串
传送门 拼命给自己拉低AC率( SAM 一发入魂 很明显 我们要查的就是 叶子结点 叶子结点 的 len 和 其父亲的 len 会影响一段区间 大概长这个样子 前面一段倾斜的 就是 len 在不断增长 后面的要取min所以就是平直的[你可能需要意会一下] 因为一个点的len是一段连续的区间 你从这个图里就可以看的比较清楚了qwq 然后我们 就重锤李超树 咳咳咳才不要李超树呢 ...原创 2018-12-21 08:57:15 · 218 阅读 · 0 评论 -
BZOJ3926 诸神眷顾的幻想乡
传送门 树上SAM! 显然如果树上一条一条字符串放的话那么是n^2的w 但是 题目的性质非常吼啊! 20个叶子节点 我们就可以 把所有叶子结点拎出来当根 全部扔到一个SAM里 就吼啦 最后的答案是 因为自动机上一个节点的贡献就是这么多啦 自动机啥的代码真的好写呢[FLAG] (机房好冷啊) 附代码。 #include<cstdio> #include<...原创 2018-12-20 20:10:19 · 199 阅读 · 0 评论 -
UOJ131 [NOI2015] 品酒大会
考前挣扎(bu shi 之前留下来的坑 首先注意到 SAM的parent树 是反串的后缀树 也就是原串的前缀树 这个性质很重要 所以说我们在树上统计的时候两个点的lca就是两个后缀串的lcp 于是可以替代后缀数组(嘿嘿嘿 然后嘞我们树形dp 统计的size就是以这个串为前缀的子串个数 然后我们通过差分【最后后缀和 来进行统计对数 树形dp维护mn mx来进行查询最大 【有负所以要维护m...原创 2019-01-18 11:28:13 · 180 阅读 · 0 评论