QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-14 06:50:00

Last updated: 2025-12-14 06:50:03

Back to Problem

题解

注意到一棵树的序列一定是空串(如果根是关键点)再加上每棵子树的序列的每个串前面加一个字符之后按某个顺序拼接起来。那么显然是把字典序最小的子树作为 $a$,次小的作为 $b$,以此类推。注意,如果序列 $x$ 是序列 $y$ 的前缀,那么 $x$ 应该放到 $y$ 后面。这个过程可以用双端队列启发式合并来维护。

但也存在更简单的做法。按深度从大到小考虑每层的点,我们把它们排序之后,按照相对关系重新编号。也就是说,我们不需要去拼接每个子树的序列,只需要把这些序列映射成整数之后形成一个新的序列。可以证明这个的做法和上面是等价的。

时间复杂度 $O(n\log n)$。

Comments

No comments yet.