CF1481F.AB Tree
普及/提高-
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Kilani and Abd are neighbors for 3000 years, but then the day came and Kilani decided to move to another house. As a farewell gift, Kilani is going to challenge Abd with a problem written by their other neighbor with the same name Abd.

The problem is:
You are given a connected tree rooted at node 1.
You should assign a character a or b to every node in the tree so that the total number of a's is equal to x and the total number of b's is equal to n−x.
Let's define a string for each node v of the tree as follows:
- if v is root then the string is just one character assigned to v:
- otherwise, let's take a string defined for the v's parent pv and add to the end of it a character assigned to v.
You should assign every node a character in a way that minimizes the number of distinct strings among the strings of all nodes.
基拉尼和阿卜杜是长达3000年的邻居,但这一天终于到来,基拉尼决定搬去另一所房子。作为临别礼物,基拉尼将用他们另一位同名邻居阿卜杜所出的一道题来挑战阿卜杜。

题目如下:
给定一棵以节点 1 为根的连通树。
你需要为树中每个节点分配字符 a 或 b,使得 a 的总个数恰好为 x,b 的总个数恰好为 n−x。
对树中每个节点 v,我们定义一个字符串如下:
- 若 v 是根节点,则该字符串即为分配给 v 的单个字符;
- 否则,取 v 的父节点 pv 所对应的字符串,并在其末尾添加分配给 v 的字符。
你需要为每个节点分配字符,使得所有节点对应字符串中互不相同的字符串总数最小。
输入格式
The first line contains two integers n and x (1≤n≤105; 0≤x≤n) — the number of vertices in the tree the number of a's.
The second line contains n−1 integers p2,p3,…,pn (1≤pi≤n; pi=i), where pi is the parent of node i.
It is guaranteed that the input describes a connected tree.
第一行包含两个整数 n 和 x(1≤n≤105;0≤x≤n)—— 分别表示树中顶点的数量和字母 a 的数量。
第二行包含 n−1 个整数 p2,p3,…,pn(1≤pi≤n;pi=i),其中 pi 表示节点 i 的父节点。
保证输入描述的是一棵连通的树。
输出格式
In the first line, print the minimum possible total number of distinct strings.
In the second line, print n characters, where all characters are either a or b and the i-th character is the character assigned to the i-th node.
Make sure that the total number of a's is equal to x and the total number of b's is equal to n−x.
If there is more than one answer you can print any of them.
第一行输出可能的最少不同字符串总数。
第二行输出 n 个字符,每个字符均为 a 或 b,其中第 i 个字符表示分配给第 i 个节点的字符。
请确保字符 a 的总数为 x,字符 b 的总数为 n−x。
若存在多个可行答案,输出任意一个即可。
输入输出样例
输入#1
9 3 1 2 2 4 4 4 3 1
输出#1
4 aabbbbbba
说明/提示
The tree from the sample is shown below:

The tree after assigning characters to every node (according to the output) is the following:

Strings for all nodes are the following:
- string of node 1 is: a
- string of node 2 is: aa
- string of node 3 is: aab
- string of node 4 is: aab
- string of node 5 is: aabb
- string of node 6 is: aabb
- string of node 7 is: aabb
- string of node 8 is: aabb
- string of node 9 is: aa
The set of unique strings is a,aa,aab,aabb, so the number of distinct strings is 4.
样例中的树如下所示:

按照输出结果为每个节点分配字符后得到的树如下所示:

各节点对应的字符串如下:
- 节点 1 的字符串为:a
- 节点 2 的字符串为:aa
- 节点 3 的字符串为:aab
- 节点 4 的字符串为:aab
- 节点 5 的字符串为:aabb
- 节点 6 的字符串为:aabb
- 节点 7 的字符串为:aabb
- 节点 8 的字符串为:aabb
- 节点 9 的字符串为:aa
所有不同字符串构成的集合为 a,aa,aab,aabb,因此不同字符串的个数为 4。
输入解题思路,AI测评打分。不知道怎么写?