Processing math: 7%

YZOJ P3897 Sevenk Love Oimaster

YZOJ P3897 Sevenk Love Oimaster

时间限制:1000MS      内存限制:131072KB

难度:7.5

  • 题目描述

n 个大串和 q 个询问,每次给出一个字符串 s 询问在多少个大串中出现过。

  • 输入格式

输入的第一行有两个整数分别代表 nq

接下来的 n 行,分别给出题中所述的 n个只包含小写字母的字符串。

再接下来的 q 行,每行给出一个询问只包含小写字母的字符串。

  • 输出格式

对于每一个询问,输出一行答案。

  • 样例输入

  • 样例输出

  • 数据规模与约定

n \leq 10000, q \leq 60000

原串总长度 \leq 100000

询问串总长度 \leq 360000

 

 

 

Source: BZOJ 2780 && SPOJ 8093


 

 

 

首先因为有多个模式串,所以建立一个广义SAM,并记录每个节点属于哪个串。

每个询问都在广义SAM上跑匹配,询问的答案就是最终匹配到的节点在 parent 树中的子树所包含的不同大串的数量。

显然可以在 parent 树上用 std::set 启发式合并,时间复杂度 O(nlog^2n)

或者按照 DFS序 离线用树状数组解决,时间复杂度 O(nlogn)

 

 

 

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注