SAM详解2.1(好题1)
SAM
- SAM
- 题目
- 一个性质
- 求解 k 小串
SAM
你可能需要先看一看前面两篇文章。
SAM详解1
SAM详解2(初级应用)
题目
题目链接
题意:给你一个字符串 s s s,求它的字典序第 k k k 小子串。注意需要分别处理两种情况,一种相同的字串只算一次,一种算多次。
数据范围: 1 ≤ ∣ s ∣ ≤ 5 × 1 0 5 , 1 ≤ k ≤ 1 0 9 1\le |s| \le 5\times 10^5,1\le k\le10^9 1≤∣s∣≤5×105,1≤k≤109
一个性质
周所周知,SAM 是一个 DAG。
而且有一个显然的性质:SAM 中任意两个节点的表示集合没有交。
所以,从某个节点(不一定要求是源点)出发的路径组成的串,都是互不相同的,如果相同的话,就违背了上述性质。
于是我们可以在这个 DAG 上统计路径条数,也就是子串的数量。
设 f [ u ] f[u] f[u] 表示从 u u u 出发的路径数。则显然有 DP 式子: f [ u ] = ∑ f [ s o n [ u ] ] f[u]=\sum f[son[u]] f[u]=∑f[son[u]]
对于本质不同子串,我们可以把所有 f [ u ] f[u] f[u] 设置为