问题 F: cats 的数据结构

内存限制:512 MB 时间限制:3 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

cats 刚刚学习了堆这个数据结构,不过他觉得二叉树的情况太简单了,想把它推广到任意结构的有根树 上。

现在 cats 有一个以 1 为根节点的树,树上的每个节点 i 都有两个整数权值 ai , bi。现在你需要为每个节 点确定权值 ai , bi,使得这个树满足以下四个条件。

1. 对于任意的 i (1 ≤ i ≤ n),都有 1 ≤ ai , bi ≤ 10^9。 

2. 对于任意的一对 u, v (1 ≤ u, v ≤ n, u != v),都有 au != av 且 bu != bv。

 3. 对于任意的一对 u, v (1 ≤ u, v ≤ n, u != v),若 u 是 v 的祖先,则 au > av 且 bu > bv。 

4. 对于任意的一对 u, v (1 ≤ u, v ≤ n, u != v),若 au > av 且 bu > bv,则 u 是 v 的祖先。

可以证明存在至少一种合法的构造方式,你需要给出所有合法构造方式中使序列 a1, b1, a2, b2, . . . an, bn 字典序最小的解。 

注 1:在一个有根树上,节点 u 为节点 v 的祖先,当且仅当所有的以 v 为起点,以根节点为终点的树上 路径都经过 u。 

注 2:两个相同长度的序列 a, b(a 与 b 至少存在一个位置不相同)的字典序比较方式为,对于最小的满 足 ai != bi 的 i,若 ai < bi 则序列 a 的字典序更小,若 ai > bi 则序列 b 的字典序更小。


				


输入格式

第一行一个整数 T (1 ≤ T ≤ 2000),表示测试数据的组数。 
接下来包含 T 组测试数据。 每组数据第一行一个整数 n (2 ≤ n ≤ 2 · 10^5 ),表示 cats 给出的树的节点个数。 
接下来一行包含 n − 1 个整数 p2, p3, · · · pn (1 ≤ pi ≤ n),依次表示编号为 2 到 n 的节点的父亲节点编 号。
保证输入的会构成一颗合法的以编号为 1 的节点作为根节点的有根树。 保证所有测试数据的 n 之和不超过 10^6。

输出格式

对于每一组测试数据输出一行 2 · n 个由空格隔开的整数 a1, b1, a2, b2, . . . an, bn,表示满足条件的字典序 最小的序列。

输入样例 复制

3
3
1 1
5
1 1 3 3
4
4 1 3

输出样例 复制

3 3 1 2 2 1
5 5 1 4 4 3 2 2 3 1
4 4 1 1 3 3 2 2