2019牛客多校八 H. How Many Schemes (AC自动机,树链剖分)

大意: 给定树, 每条边有一个字符集合, 给定$m$个模式串, $q$个询问$(u,v)$, 对于路径$(u,v)$中的所有边, 每条边从对应字符集合中取一个字符, 得到一个串$s$, 求$s$至少包含一个模式串的方案数.

$AC$自动机建好, 每个点维护一个矩阵$v_{i,j}$, 表示从$AC$自动机中状态$i$到$j$的方案数.

直接暴力树剖的复杂度是$O(nt^3+qt^3log^2n)$, 预处理复杂度还行, 但询问时间过大.

实际上每组询问只需要矩阵相乘后状态$0$对应的那一行的值, 所以只需要用一个向量每次$n^2$相乘即可.

又因为不带修改操作, 可以先$O(nt^3)$预处理每个点到链头的矩阵乘积, 这样询问时只需要最后在同一条链上时在线段树中查询一次.

所以总复杂度就是$O(nt^3+qt^2logn)$可以通过.

猜你喜欢

转载自www.cnblogs.com/uid001/p/11415910.html
今日推荐