CF1481F AB Tree

题目描述

Kilani 和 Abd 已经做了 3000 年的邻居,但终于有一天,Kilani 决定搬到另一个房子。作为告别礼物,Kilani 决定用他们另一位同名邻居 Abd 出的一道题来考考 Abd。 你得到了一棵以 $1$ 号节点为根的连通树。 你需要给树上的每个节点分配一个字符 a 或 b,使得 a 的总数等于 $x$,b 的总数等于 $n-x$。 我们对树上每个节点 $v$ 定义一个字符串,规则如下: - 如果 $v$ 是根节点,则该字符串就是分配给 $v$ 的那个字符; - 否则,取 $v$ 的父节点 $p_v$ 的字符串,在其末尾加上分配给 $v$ 的字符。 你需要为每个节点分配字符,使得所有节点对应的字符串中,不同字符串的数量最小。

输入格式

第一行包含两个整数 $n$ 和 $x$($1 \leq n \leq 10^5$,$0 \leq x \leq n$),分别表示树的节点数和 a 的数量。 第二行包含 $n-1$ 个整数 $p_2, p_3, \dots, p_n$($1 \leq p_i \leq n$,$p_i \neq i$),其中 $p_i$ 表示节点 $i$ 的父节点编号。 保证输入描述的是一棵连通树。

输出格式

第一行输出不同字符串的最小可能数量。 第二行输出 $n$ 个字符,每个字符为 a 或 b,第 $i$ 个字符表示分配给第 $i$ 个节点的字符。 保证 a 的总数为 $x$,b 的总数为 $n-x$。 如果有多组答案,输出任意一组均可。

说明/提示

样例中的树如下图所示: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1481F/9932c28421df84ed39aa2de0d427f303796fa492.png) 按照输出分配字符后的树如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1481F/b80718723843c4e9743a61aa5539266f93c681e1.png) 所有节点对应的字符串如下: - 节点 $1$ 的字符串为:a - 节点 $2$ 的字符串为:aa - 节点 $3$ 的字符串为:aab - 节点 $4$ 的字符串为:aab - 节点 $5$ 的字符串为:aabb - 节点 $6$ 的字符串为:aabb - 节点 $7$ 的字符串为:aabb - 节点 $8$ 的字符串为:aabb - 节点 $9$ 的字符串为:aa 不同字符串的集合为 $\{\text{a}, \text{aa}, \text{aab}, \text{aabb}\}$,因此不同字符串的数量为 $4$。 由 ChatGPT 4.1 翻译