Rooted Trees

Descriptions:

A graph G = (VE) is a data structure where V is a finite set of vertices and E is a binary relation on V represented by a set of edges. Fig. 1 illustrates an example of a graph (or graphs).

 
Fig. 1

A free tree is a connnected, acyclic, undirected graph. A rooted tree is a free tree in which one of the vertices is distinguished from the others. A vertex of a rooted tree is called "node."

Your task is to write a program which reports the following information for each node u of a given rooted tree T:

  • node ID of u
  • parent of u
  • depth of u
  • node type (root, internal node or leaf)
  • a list of chidlren of u

If the last edge on the path from the root r of a tree T to a node x is (px), then p is the parent of x, and x is a child of p. The root is the only node in T with no parent.

A node with no children is an external node or leaf. A nonleaf node is an internal node

The number of children of a node x in a rooted tree T is called the degree of x.

The length of the path from the root r to a node x is the depth of x in T.

Here, the given tree consists of n nodes and evey node has a unique ID from 0 to n-1.

Fig. 2 shows an example of rooted trees where ID of each node is indicated by a number in a circle (node). The example corresponds to the first sample input.

 
Fig. 2

Input

The first line of the input includes an integer n, the number of nodes of the tree.

In the next n lines, the information of each node u is given in the following format:

id k c1 c2 ... ck

where id is the node ID of uk is the degree of uc1 ... ck are node IDs of 1st, ... kth child of u. If the node does not have a child, the k is 0.

Output

Print the information of each node in the following format ordered by IDs:

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

p is ID of its parent. If the node does not have a parent, print -1.

d is depth of the node.

type is a type of nodes represented by a string (root, internal node or leaf). If the root can be considered as a leaf or an internal node, print root.

c1...ck is the list of children as a ordered tree.

Please follow the format presented in a sample output below.

Constraints

  • 1 ≤ n ≤ 100000

Sample Input 1

  1. 13
  2. 0 3 1 4 10
  3. 1 2 2 3
  4. 2 0
  5. 3 0
  6. 4 3 5 6 7
  7. 5 0
  8. 6 0
  9. 7 2 8 9
  10. 8 0
  11. 9 0
  12. 10 2 11 12
  13. 11 0
  14. 12 0

Sample Output 1

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

Sample Input 2

  1. 4
  2. 1 3 3 2 0
  3. 0 0
  4. 3 0
  5. 2 0

Sample Output 2

  1. node 0: parent = 1, depth = 1, leaf, []
  2. node 1: parent = -1, depth = 0, root, [3, 2, 0]
  3. node 2: parent = 1, depth = 1, leaf, []
  4. node 3: parent = 1, depth = 1, leaf, []

Note

You can use a left-child, right-sibling representation to implement a tree which has the following data:

  • the parent of u
  • the leftmost child of u
  • the immediate right sibling of u

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.

题目链接:

https://vjudge.net/problem/Aizu-ALDS1_7_A

题目大意:给你一个有根树的各个信息,输出它的父亲,深度,是什么性质的节点,子节点列表

输入0 - N-1节点的度和子节点(无序), 要求按照节点序号输出节点的相关信息
node id: parent = p , depth = d, type, [c1…ck]

具体做法都在代码上

AC代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <deque>
  7. #include <vector>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <map>
  12. #include <stack>
  13. #include <set>
  14. #include <sstream>
  15. #define mod 1000000007
  16. #define eps 1e-6
  17. #define ll long long
  18. #define INF 0x3f3f3f3f
  19. #define ME0(x) memset(x,0,sizeof(x))
  20. using namespace std;
  21. struct node
  22. {
  23. int parent;
  24. int left,right;//左子右兄弟表示法,l代表节点u的最左侧的子结点,r为u的右侧紧邻的兄弟节点
  25. };
  26. node a[];
  27. int D[];
  28. void getDepth(int u,int p)//递归求结点的深度
  29. {
  30. D[u]=p;
  31. if(a[u].right!=-)//当前结点存在右侧兄弟节点,不改变深度
  32. getDepth(a[u].right,p);
  33. if(a[u].left!=-)//存在最左侧子结点,深度+1
  34. getDepth(a[u].left,p+);
  35. }
  36. void print(int u)
  37. {
  38. cout<<"node "<<u<<": parent = "<<a[u].parent<<", depth = "<<D[u]<<", ";
  39. if(a[u].parent==-)//不存在父结点,即为根节点
  40. cout<<"root, [";
  41. else if(a[u].left==-)//没有子结点,即为叶
  42. cout<<"leaf, [";
  43. else
  44. cout<<"internal node, [";
  45. for(int i=,c=a[u].left; c!=-; ++i,c=a[c].right)
  46. {
  47. if(i)
  48. cout<<", ";
  49. cout<<c;//节点u的子结点列表从u的左侧子结点开始按顺序输出,直到当前子结点不存在右侧兄弟节点为止
  50. }
  51. cout<<"]"<<endl;
  52.  
  53. }
  54. int main()
  55. {
  56. int n;
  57. cin>>n;
  58. for(int i=; i<n; ++i)//初始化
  59. a[i].left=a[i].parent=a[i].right=-;
  60. for(int i=; i<n; ++i)
  61. {
  62. int id,k;
  63. cin>>id>>k;
  64. for(int j=; j<k; ++j)
  65. {
  66. int c,l;
  67. cin>>c;
  68. if(j)
  69. a[l].right=c;
  70. else
  71. a[id].left=c;
  72. l=c;
  73. a[c].parent=id;
  74. }
  75. }
  76. int root;//根节点的编号
  77. for(int i=; i<n; ++i)
  78. if(a[i].parent==-)
  79. root=i;
  80. getDepth(root,);
  81. for(int i=; i<n; ++i)
  82. print(i);
  83. }

【Aizu - ALDS1_7_A】Rooted Trees(树的表达)的更多相关文章

  1. 有根树的表达 Aizu - ALDS1_7_A: Rooted Trees

    有根树的表达 题目:Rooted Trees Aizu - ALDS1_7_A  A graph G = (V, E) is a data structure where V is a finite ...

  2. HDU p1294 Rooted Trees Problem 解题报告

    http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...

  3. Tree - Rooted Trees

    Rooted Trees A graph G = (V, E) is a data structure where V is a finite set of vertices and E is a b ...

  4. 10.3 Implementing pointers and objects and 10.4 Representing rooted trees

    Algorithms 10.3 Implementing pointers and  objects  and 10.4 Representing rooted trees Allocating an ...

  5. TZOJ 4292 Count the Trees(树hash)

    描述 A binary tree is a tree data structure in which each node has at most two child nodes, usually di ...

  6. HDU 1294 Rooted Trees Problem

    题目大意:求有n个节点的树有几种? 题解:http://www.cnblogs.com/keam37/p/3639294.html #include <iostream> typedef ...

  7. Disharmony Trees 树状数组

    Disharmony Trees Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  8. HDU 5111 Alexandra and Two Trees 树链剖分 + 主席树

    题意: 给出两棵树,每棵树的节点都有一个权值. 同一棵树上的节点的权值互不相同,不同树上节点的权值可以相同. 要求回答如下询问: \(u_1 \, v_1 \, u_2 \, v_2\):询问第一棵树 ...

  9. HDU1294 Rooted Trees Problem(整数划分 组合数学 DP)

    讲解见http://www.cnblogs.com/IMGavin/p/5621370.html, 4 可重组合 dfs枚举子树的节点个数,相乘再累加  1 #include<iostream& ...

随机推荐

  1. llmp_install.zip

    https://pan.baidu.com/s/14tQdE9CPe55P5m9rGm5ekw

  2. Process 'command 'D:\AndroidSDK\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2

    解决方法: 在jni文件下建一个空的empty.c文件 编译运行即可. 如果还运行不了,在当前model的build.gradle下添加. android{ ………… sourceSets.main ...

  3. cygwin使用笔记

    1.在cygwin里访问Windows盘 cd /cygdrive/c cd c: 2.整合cygwin命令到Windows中 假设cygwin安装在d:/develop/cygwin,则将d:/de ...

  4. Python序列——字符串

    字符串 1 string模块预定义字符串 2 普通字符串与Unicode字符串 3 只适用于字符串的操作 4 原始字符串 5 Unicode字符串操作符 内建函数 1 标准类型函数与序列操作函数 2 ...

  5. BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 1000 ...

  6. codeforces 702B B. Powers of Two(水题)

    题目链接: B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  7. AutoIt:AutoIt比我想象的更加强大

    前段时间,我一直认为,通过AutoIt进行自动化操作,也只有几个方法可以用,它们只是controlClick, controlsend等如下图: 我一直认为,AutoIt的所有的GUI 方法,都是用来 ...

  8. C++ 两款静态检查工具

    pclint(收费) http://www.gimpel.com/html/pcl.htmpc-lint是资格最老,最强力的代码检查工具,但是是收费软件,并且配置起来有一点点麻烦. ccpchecke ...

  9. 洛谷P4719 动态DP —— 动态DP(树剖+矩乘)

    题目:https://www.luogu.org/problemnew/show/P4719 感觉这篇博客写得挺好:https://blog.csdn.net/litble/article/detai ...

  10. OA系统

    当用户登录时,根据用户名让他去查找用户的ID,编号,角色,权限,部门信息,等信息查找出来,用户表和角色表是一个一对多的关系,角色和权限也是一个一对多的关系,所以总共加起来有五张表,获取权限是通过用户名 ...