@[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