随笔分类 - 字符串——后缀自动机
摘要:为啥我的做法总是比标程的代码难度高一倍?
阅读全文
摘要:SAM上定位子串然后通过parent树优化建图就可以了 由于一个节点可能会有很多串所以拆出来一些点就行了 //Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #inclu
阅读全文
摘要:考前挣扎(bu shi 之前留下来的坑 首先注意到 SAM的parent树 是反串的后缀树 也就是原串的前缀树 这个性质很重要 所以说我们在树上统计的时候两个点的lca就是两个后缀串的lcp 于是可以替代后缀数组(嘿嘿嘿 然后嘞我们树形dp 统计的size就是以这个串为前缀的子串个数 然后我们通过差
阅读全文
摘要:传送门 广义后缀自动机= =+ 跟ptx大爷的博客学的 戳我传送 我写的第一种 建立Trie树的写法 bfs建立SAM 为什么是bfs呢 我也不知道(GG) 经过我一番抱大腿+询问 各位大爷说的原因是 因为dfs时间复杂度不对 多有道理哦 【摔 不过好像这个复杂度保证好像真的不大准确2333 所以
阅读全文
摘要:传送门 转化题意可以得到 我们求得就是 所有串的差分串的LCS SAM水过就好啦
阅读全文
摘要:传送门 拼命给自己拉低AC率( SAM 一发入魂 很明显 我们要查的就是 叶子结点 叶子结点 的 len 和 其父亲的 len 会影响一段区间 大概长这个样子 前面一段倾斜的 就是 len 在不断增长 后面的要取min所以就是平直的[你可能需要意会一下] 因为一个点的len是一段连续的区间 你从这个
阅读全文
摘要:传送门 树上SAM! 显然如果树上一条一条字符串放的话那么是n^2的w 但是 题目的性质非常吼啊! 20个叶子节点 我们就可以 把所有叶子结点拎出来当根 全部扔到一个SAM里 就吼啦 最后的答案是 因为自动机上一个节点的贡献就是这么多啦 自动机啥的代码真的好写呢[FLAG] (机房好冷啊) 附代码。
阅读全文
摘要:传送门 样例毒瘤 强制在线毒瘤( 做法比较显然啦 我们需要维护一个SAM 并资磁查询子树大小 由于强制在线 所以就需要LCT咯 查询子树大小我们可以变成链加+单点查询 然后匹配过程就和ACA的跳跳跳一样啦 decode这个地方真的坑 mask要设局部变量 附代码。
阅读全文
摘要:传送门 心态崩了++ 后缀自动机板子题[考场上要是不会后缀自动机就崩了T^T] 可以看出 每次答案的贡献就是和原来本质不同的子串数量 根据SPOJ7258我们可以得到 本质不同的子串数量可以通过建出自动机 树形dp解决 我们需要知道的就是 连向它的那个链 就是我们建立自动机的时候的那个找的p 直接求
阅读全文
摘要:传送门[洛谷] 心态崩了我有妹子 靠 我写的记忆化搜索 莫名WA了 然后心态崩了 当我正要改成bfs排序的时候 我灵光一动 md我写的i=0;i<25;i++??? 然后 改过来就A掉了T^T 大体做法就是 一个点出发的本质不同子串数量应该是就是所有添加字符的转移和其余选一个空串的转移 所以直接建出
阅读全文
摘要:传送门[洛谷] 多个串!1811的升级版~ 其实做法很相似 我们只需要对第一个串建立SAM 然后 每个串在上面跑 由于是求所有字符串交的LCS 我们只需要记录每个节点与当前串匹配的max和之前所有串匹配的min max是需要子树更新的 min要记得和当前的max还有len[节点最大长度]取min 然
阅读全文
摘要:传送门[洛谷] SAM板子题?(可惜我还是不会) 大概就是能匹配就一直往下匹配 不能匹配就跳parent 调到能匹配为止 跳到根了就重新开始 最开始太蠢了非要写递归版 写着写着发现不知道我要写啥了T^T 果断换循环。。
阅读全文
摘要:传送门[洛谷] SAM模板题 可惜我不会 本来想大力上线段树的 然后发现题解的做法非常精妙 因为 很显然长度为i的字符串出现长度一定>=长度为i+1的字符串 [作为子串出现就可以取到=] 那么直接记录最后倒着更新一遍就可以啦 附代码。
阅读全文
摘要:传送门 真·玄学 还是没有完全搞懂SAM的性质啥的啊T^T 我本来以为SAM会很长的没想到这么短 这个题就是建出SAM 然后建树求出right然后*len[max]直接取max即可啦 学习笔记什么的等等吧[鸽了我也不管] 附代码。
阅读全文