题目 30223

回文树(Eertree)

查看题解 ↗GitHub ↗如何评测
题号
30223
时间限制
10000 ms
内存限制
1024 MB
标签
字符串
来源
Library Checker (yosupo06) - eertree

【题目描述】

给定一个由小写英文字母组成的字符串 SS。请按照下面的描述,输出 SS 的回文树(eertree,也称为回文树、palindromic tree 或 palindrome tree)的信息。

  • 设 PP 为 SS 的所有非空回文子串组成的集合,令 n=∣P∣n = |P|。
  • SS 的回文树由 22 棵树组成,其中包含 nn 个与 PP 中元素一一对应的顶点,以及两个称为 ODD 和 EVEN 的特殊顶点。
  • 回文树的顶点编号方式如下:
    • ODD 的编号为 −1-1,EVEN 的编号为 00。
    • 其他每个顶点 vv 都对应某个 str(v)∈P\mathrm{str}(v) \in P。对于 str(v)=Si⋯Sj−1\mathrm{str}(v) = S_i \cdots S_{j-1},按 jj 的升序为这些顶点分别赋予编号 1,2,…,n1, 2, \ldots, n,其中 (i,j)(i,j) 的选取使得 jj 最小。
    • 对每个顶点 vv(1≤v≤n1 \leq v \leq n),令 pvp_v 为其父亲顶点的编号。也就是说,pvp_v 是删去 str(v)\mathrm{str}(v) 的首尾各一个字符后得到的回文所对应的顶点的编号。不过,若 ∣str(v)∣=2|\mathrm{str}(v)| = 2,则其父亲是 EVEN(编号 00);若 ∣str(v)∣=1|\mathrm{str}(v)| = 1,则其父亲是 ODD(编号 −1-1)。
  • 对每个顶点 vv(1≤v≤n1 \leq v \leq n),令 svs_v 为从 vv 出发的后缀链接的终点编号。也就是说,svs_v 是 str(v)\mathrm{str}(v) 的、长度小于 str(v)\mathrm{str}(v) 的最长非空回文后缀所对应的顶点的编号。若不存在这样的回文后缀,则规定后缀链接的终点为 EVEN(编号 00)。

输出 nn,以及每个 vv(1≤v≤n1 \leq v \leq n)对应的 pv,svp_v, s_v。

此外,对每个 i=1,2,…,∣S∣i = 1, 2, \ldots, |S|,输出长度为 ii 的前缀 S0⋯Si−1S_0 \cdots S_{i-1} 的最长回文后缀所对应的顶点编号。

【输入】

文本
$S$

【输出】

文本
$n$
$p_1$ $s_1$
$\vdots$
$p_n$ $s_n$
$v_1$ $\ldots$ $v_{|S|}$

【输入样例】

文本
abaa

【输出样例】

文本
4
-1 0
-1 0
2 1
0 1
1 2 3 4

【输入样例2】

文本
aaaaaaa

【输出样例2】

文本
7
-1 0
0 1
1 2
2 3
3 4
4 5
5 6
1 2 3 4 5 6 7

【输入样例3】

文本
abaccabacacca

【输出样例3】

文本
11
-1 0
-1 0
2 1
-1 0
0 4
5 1
6 2
7 3
3 4
4 1
1 4
1 2 3 4 5 6 7 8 9 10 11 5 6

【数据范围】

  • 1≤∣S∣≤10000001 \leq |S| \leq 1000000
  • SS 的每个字符都是小写英文字母。

【来源】

Library Checker(yosupo06) eertree

数据下载

题目 30223 的公开数据

正在读取文件列表…

常用命令

题目 30223 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。