P1104 - 树的表示

题目描述

给定一棵有根树的信息,请你编写个程序输出这棵树的各个节点的信息:

  • 当前节点的编号
  • 当前节点的种类(root, internal node,leaf,分别代表:根、内部节点、叶子节点)
  • 当前节点的父节点编号
  • 当前节点的子节点列表
  • 当前节点的深度(根节点的深度为0)

根节点(root)是没有父节点的那个节点,只有1个根节点

叶子节点(leaf)是没有子节点的那些节点

内部节点(internal node)是除了根节点和叶子节点外的其他节点

这里,给定的树由 n 个节点组成,每个节点都有一个从 0 到 n-1 的唯一ID编号(或者是值域)。

下图 显示了一个有根树的示例,其中每个节点的 ID 由圆圈中的数字(节点)表示。该示例对应于第一个样例输入。

1.png

输入格式

输入的第一行包含一个整数 n,表示树的节点数。

接下来的 n 行中,每行提供一个节点 u 的信息,格式如下:

id k c1 c2 ... ck

其中 id 是节点 u 的 ID,k 是 u 的度,c1 ... ck 是 u 的第 1 到第 k 个子节点的 ID。如果节点没有子节点,则 k 为 0。

输出格式

按 ID 顺序(从小到大的顺序)以下面的格式打印每个节点的信息:

node id: parent = p, depth = d, type, [c1...ck]

p 是其父节点的 ID。如果节点没有父节点,打印 -1。

d 是节点的深度,根节点的深度为0

type 是表示节点类型的字符串(根节点 root、内部节点 internal node或叶节点 leaf)。如果只有1个节点,则视为根节点,打印 root。

c1...ck 是按顺序排列的子节点列表。

请遵循下面的示例输出格式。

输入输出样例

输入样例 输出样例
13
0 3 1 4 10
1 2 2 3
2 0
3 0
4 3 5 6 7
5 0
6 0
7 2 8 9
8 0
9 0
10 2 11 12
11 0
12 0
node 0: parent = -1, depth = 0, root, [1, 4, 10]
node 1: parent = 0, depth = 1, internal node, [2, 3]
node 2: parent = 1, depth = 2, leaf, []
node 3: parent = 1, depth = 2, leaf, []
node 4: parent = 0, depth = 1, internal node, [5, 6, 7]
node 5: parent = 4, depth = 2, leaf, []
node 6: parent = 4, depth = 2, leaf, []
node 7: parent = 4, depth = 2, internal node, [8, 9]
node 8: parent = 7, depth = 3, leaf, []
node 9: parent = 7, depth = 3, leaf, []
node 10: parent = 0, depth = 1, internal node, [11, 12]
node 11: parent = 10, depth = 2, leaf, []
node 12: parent = 10, depth = 2, leaf, []
4
1 3 3 2 0
0 0
3 0
2 0
node 0: parent = 1, depth = 1, leaf, []
node 1: parent = -1, depth = 0, root, [3, 2, 0]
node 2: parent = 1, depth = 1, leaf, []
node 3: parent = 1, depth = 1, leaf, []

数据范围与提示

100%的数据:$1 \le n \le 100000$

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:P1104.in,输出文件名为:P1104.out