[HNOI2019]JOJO

题意

给出一棵\(n\)个节点的字符串树,每个节点都是长为\(x\)字符\(c\)的字符串,父亲与儿子的\(c\)不同,每个点代表一个以根为首以其结尾的字符串,对于字符串\(S\)\(f(S)=\sum fail_i\)\(fail_i\)\(kmp\)的失配指针,求每个点的\(f(S)\)\(n,x\le 10^5\)

做法

性质:父亲与儿子的\(c\)不同
则把\(fail_i\)钦定不能在节点中间
该节点长度为\(x\)\(f\)不一定都是\(fail_i\)产生过来的贡献,因为原来的\(fail_i\)的定义是最长的

如果暴跳\(fail\),由于是一棵树,所以复杂度不能均摊,但\(fail\)如果大于原串的一半了说明有周期,直接跳到第一个就好了

posted @ 2020-04-16 15:32  Grice  阅读(139)  评论(0编辑  收藏  举报