F. Tree Factory

Bytelandian Tree Factory produces trees for all kinds of industrial applications. You have been tasked with optimizing the production of a certain type of tree for an especially large and important order.

The tree in question is a rooted tree with n vertices labelled with distinct integers from 0 to n−1. The vertex labelled 0 is the root of the tree, and for any non-root vertex v the label of its parent p(v) is less than the label of v.

All trees at the factory are made from bamboo blanks. A bamboo is a rooted tree such that each vertex has exactly one child, except for a single leaf vertex with no children. The vertices of a bamboo blank can be labelled arbitrarily before its processing is started.

To process a bamboo into another tree a single type of operation can be made: choose an arbitrary non-root vertex v such that its parent p(v) is not a root either. The operation consists of changing the parent of v to its parent's parent p(p(v)). Note that parents of all other vertices remain unchanged, in particular, the subtree of v does not change.

Efficiency is crucial, hence you have to minimize the number of operations to make the desired tree from a bamboo blank. Construct any optimal sequence of operations to produce the desired tree.

Note that the labelling of the resulting tree has to coincide with the labelling of the desired tree. Formally, the labels of the roots have to be equal, and for non-root vertices with the same label the labels of their parents should be the same.

It is guaranteed that for any test present in this problem an answer exists, and further, an optimal sequence contains at most 106 operations. Note that any hack that does not meet these conditions will be invalid.

Input

The first line contains a single integer n — the number of vertices in the tree (2≤n≤105).

The second line contains n−1 integers p(1),…,p(n−1) — indices of parent vertices of 1,…,n−1 respectively (0≤p(i)<i).

Output

In the first line, print n distinct integers id1,…,idn — the initial labelling of the bamboo blank starting from the root vertex (0≤idi<n).

In the second line, print a single integer k — the number of operations in your sequence (0≤k≤106).

In the third line print k integers v1,…,vk describing operations in order. The i-th operation consists of changing p(vi) to p(p(vi)). Each operation should be valid, i.e. neither vi nor p(vi) can be the root of the tree at the moment.

Examples

input

5

0 0 1 1

output

0 2 1 4 3

2

1 3

input

4

0 1 2

output

0 1 2 3

0

题意

现在有一个链,然后每次操作可以使得fa[x]=fa[fa[x]],就是使得自己的爷爷变成自己的父亲。然后操作若干次,就会变成一颗树。

现在题目给你一个根为0的树,说这个是由一条链操作得到的,让你还原这条链的样子,并输出方案,要求操作次数最少。

题解

我们把操作转换一下,其实就是使得一个子树的父亲,变成自己的兄弟。

我们手动模拟一下,可以发现,树链的长度是一定的,我们如果让深度大于等于他的子树插进去的话,那么深度肯定会+1的,于是我们就每次插入深度大于等于他的就好了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int fa[maxn],mx[maxn],n;
vector<int>son[maxn];
vector<int>order;
bool cmp(int x,int y){
return mx[x]<mx[y];
}
void dfs1(int x){
for(int i=0;i<son[x].size();i++){
dfs1(son[x][i]);
mx[x]=max(mx[x],mx[son[x][i]]+1);
}
sort(son[x].begin(),son[x].end(),cmp);
}
void dfs2(int x){
cout<<x<<" ";
for(int i=0;i<son[x].size();i++){
dfs2(son[x][i]);
if(i==0)continue;
for(int j=0;j<=mx[son[x][i-1]];j++){
order.push_back(son[x][i]);
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d",&fa[i]);
son[fa[i]].push_back(i);
}
dfs1(0);
dfs2(0);
cout<<endl;
cout<<order.size()<<endl;
for(int i=0;i<order.size();i++){
cout<<order[i]<<" ";
}
cout<<endl;
}

Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) F. Tree Factory 构造题的更多相关文章

  1. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2)

    A - Forgetting Things 题意:给 \(a,b\) 两个数字的开头数字(1~9),求使得等式 \(a=b-1\) 成立的一组 \(a,b\) ,无解输出-1. 题解:很显然只有 \( ...

  2. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products

    链接: https://codeforces.com/contest/1247/problem/D 题意: You are given n positive integers a1,-,an, and ...

  3. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) C. p-binary

    链接: https://codeforces.com/contest/1247/problem/C 题意: Vasya will fancy any number as long as it is a ...

  4. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B2. TV Subscriptions (Hard Version)

    链接: https://codeforces.com/contest/1247/problem/B2 题意: The only difference between easy and hard ver ...

  5. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) A. Forgetting Things

    链接: https://codeforces.com/contest/1247/problem/A 题意: Kolya is very absent-minded. Today his math te ...

  6. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) E. Rock Is Push dp

    E. Rock Is Push You are at the top left cell (1,1) of an n×m labyrinth. Your goal is to get to the b ...

  7. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B. TV Subscriptions 尺取法

    B2. TV Subscriptions (Hard Version) The only difference between easy and hard versions is constraint ...

  8. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) A. Forgetting Things 水题

    A. Forgetting Things Kolya is very absent-minded. Today his math teacher asked him to solve a simple ...

  9. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products 数学 暴力

    D. Power Products You are given n positive integers a1,-,an, and an integer k≥2. Count the number of ...

随机推荐

  1. Vue 监听鼠标左键 鼠标右键以及鼠标中键修饰符click.left&contextmenu&click.middle

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JWT的优点和实现Token认证的安全问题

    JWT的优点和实现Token认证的安全问题 一.什么是JWT JWT——Json web token  是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应 ...

  3. 发布Jar包到中央仓库

    参考流程 https://blog.csdn.net/qq_36838191/article/details/81027586 备份还原 gpg-keys https://blog.rathena.c ...

  4. node 下载 md5.js

    命令:npm install js-md5

  5. EggJs快速入门

    Egg.js 简介 Egg.js 为企业级框架和应用而生,帮助开发团队和开发人员降低开发和维护成本. 专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机制,不会做出技术选型,因为固定的技术选型 ...

  6. 使用suds模块进行封装,处理webservice类型的接口

    import json from suds.client import Client class HandleWebservice: ''' 定义一个webservice类型的接口处理类 ''' de ...

  7. -ffast-math编译选项作用

    https://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do

  8. 2018-8-10-win10-uwp-商业游戏-

    原文:2018-8-10-win10-uwp-商业游戏- title author date CreateTime categories win10 uwp 商业游戏 lindexi 2018-08- ...

  9. Nginx+keepalived(高可用主备模式)

    Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...

  10. CAD打印图纸要怎么操作?简单方法分享给你

    大家日常生活中多多少少的都接触到过CAD文件,CAD图是借助CAD制图软件来进行绘制完成的.唯一的困惑就是CAD图纸的格式大多数均为dwg格式的,查看起来不是那么的方便?所以很多设计师们都会选择将图纸 ...