[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\)如果大于原串的一半了说明有周期,直接跳到第一个就好了