题目描述
刘老师要处理 棵有根树。每棵树中,每个顶点都给出了自己的父亲;根节点把自己作为父亲。
一条竖直路径是一个顶点序列 ,其中对于每个 ,顶点 都是顶点 的父亲。现在要把树中的全部顶点恰好分配到若干条互不相交的竖直路径中,并让路径条数尽可能少。
为了使输出结果唯一,本题采用下面的固定约定:按照叶子编号从小到大处理;对于当前叶子,沿父指针向上收集所有尚未放入其他路径的顶点,再把收集到的序列反转,得到一条从祖先到后代的竖直路径。
输入格式
第一行输入一个整数 ,表示测试数据组数。
每组数据的第一行输入一个整数 ,表示顶点数量。
第二行输入 个整数 ,其中 表示顶点 的父亲。根节点 满足 。
输出格式
对于每组数据,先输出一个整数 ,表示最少路径条数。
随后依次输出这 条路径。每条路径先输出它包含的顶点数量,再输出路径中的顶点序列。
每组数据输出结束后再输出一个空行。
3
4
1 1 2 1
10
1 1 1 1 1 5 1 2 2 3
6
1 1 2 3 4 3
2
3
1 2 3
1
4
6
2
1 4
2
5 6
1
7
2
2 8
1
9
2
3 10
2
5
1 2 3 4 5
1
6
1
10
1 1 1 2 4 2 3 5 4 6
4
3
1 3 7
4
2 4 5 8
1
9
2
6 10
1
8
1 1 2 1 4 1 2 2
5
3
1 2 3
2
4 5
1
6
1
7
1
8
数据范围与约定
- 所有测试组的 之和不超过
- 父亲数组描述一棵有根树且根满足