#CF1225F. 树工厂
树工厂
F. 树工厂
每个测试的时间限制:2 秒
内存限制:512 兆字节
比特兰树工厂为各种工业应用生产树木。你被要求优化某种特定类型树木的生产,以完成一项特别大且重要的订单。
该树是一棵有根树,有 个顶点,顶点标有从 到 的互不相同的整数。标号为 的顶点是树的根,对于任意非根顶点 ,其父节点 的标号小于 的标号。
工厂里的所有树都是由竹坯制成的。竹是一种有根树,其中每个顶点恰好有一个子节点,除了一个没有子节点的叶子顶点。竹坯的顶点可以在开始加工前任意标记。
要将竹子加工成另一棵树,只能进行一种操作:选择一个任意的非根顶点 ,且其父节点 也不是根节点。该操作将 的父节点改为其父节点的父节点 。注意,其他所有顶点的父节点保持不变,特别地, 的子树不会改变。
效率至关重要,因此你必须最小化从竹坯生成目标树所需的操作次数。构造任意一个最优操作序列来生成目标树。
注意,生成树的标号必须与目标树的标号一致。形式上,两个树的根标号必须相同,并且对于具有相同标号的非根顶点,其父节点的标号也必须相同。
题目保证对于测试数据中的任何测试用例,答案都存在,并且进一步地,最优序列中的操作数不超过 。注意,任何不符合这些条件的 hack 都将无效。
输入
第一行包含一个整数 —— 树中顶点的数量()。
第二行包含 个整数 —— 分别表示顶点 的父节点编号()。
输出
第一行打印 个互不相同的整数 —— 从根节点开始的竹坯的初始标号()。
第二行打印一个整数 —— 操作序列中的操作数()。
第三行打印 个整数 描述按顺序执行的操作。第 个操作包括将 改为 。每个操作必须有效,即在操作时刻, 和 都不能是树的根。
样例输入 1
5
0 0 1 1
样例输出 1
0 2 1 4 3
2
1 3
样例输入 2
4
0 1 2
样例输出 2
0 1 2 3
0