何以伊名始
何以伊名始
本题现已知四种做法,如果不会后缀系列结构可以直接看Solution4
设初始树大小和查询总长均为$O(n)$
Solution1
由于查询只有1e6,因此出现的不同查询串长度最多$\sqrt {10^6}=1000$种
考虑对于每一种做一次dfs,在$\text{Hash Table}$中查询,复杂度为$O(n\sqrt n)$
Solution2
将树上节点后缀排序,然后每次插入需要询问的字符就二分后缀区间
预处理复杂度为$O(n\log n)$,查询涉及二分和倍增,复杂度为$O(n\log ^2 n)$
Solution3
给定的树看做trie树,可以对于trie树建广义后缀自动机,然后倒着让询问串去匹配,一旦失配答案为0,
需要预处理$link$树的子树和,时间复杂度为$O(n)$,空间复杂度为$O(n|\Sigma|)$
Solution4
将询问的串倒着插入,构建AC自动机
由于AC自动机预处理,时间空间复杂度为$O(n|\Sigma|)$
然后考虑对于树上每一个前缀在AC自动机上匹配,每次从父亲转移过来,复杂度为$O(n)$
然后是常见的AC自动机操作,$fail$树上的子树累和即可
需要询问离线,因此有一定局限性
1 |
|