A question about SAM

P3804 【模板】后缀自动机(SAM)

@[Rain_chr](/user/684254) 你后面不是要dfs上传吗,这样会算重
by XHY20180718 @ 2023-08-08 17:30:00


@[XHY20180718](/user/399475) soga,thx
by Rain_chr @ 2023-08-09 18:56:28


@[Rain_chr](/user/684254) 补充一下,当时没有讲会算重的原因: 我们定义包含前缀的节点(endpos集合)为终点节点,这样我们会有 $n$ 个终点节点。 我们每次都只会特判这些包含前缀的终点节点,因为这些节点所表示的字符串集合中的最后一个字符位置(endpos)不会被其他节点所包含,举个例子: ![](https://cdn.luogu.com.cn/upload/image_hosting/3oa6lbcx.png) ~~(画的丑,不洗勿喷)~~ 可以看出节点 $1 2 3 4 6 7 9$ 为终点节点,他们都有自己的独立结束位置,即 $endpos$,也就是字符串的前缀那个位置,比如对于 $1$ 号节点他在原字符串中的一个 $endpos$ 为 $1$,他也就在这个位置独立出现了一次:**a**abbabd。他同时也会被其他的一些节点的字符串所包含,比如 2(aa)8(ab),因此同时会加上他们的出现次数。 而 $8$ 号节点不是终点节点,他在字符串中出现的地方为:a**ab**b**ab**d。这些位置没有他们的独立出现的地方,其 $endpos$ 完全被 aab 和 bab 所包含,所以在赋初值时不用考虑单独出现的地方。 讲的可能不是很清楚,但有不懂的地方可以直接问。
by XHY20180718 @ 2023-08-31 11:06:32


@[XHY20180718](/user/399475) 谢谢! 没想到您会写这么长的答复,让我一下子就弄懂了! 费心了
by Rain_chr @ 2023-08-31 15:25:16


学到了 ~~以后多看chr的求助帖~~
by wxzzzz @ 2023-10-13 13:06:18


|