【Aizu - ALDS1_7_A】Rooted Trees(树的表达)
Rooted Trees
Descriptions:
A graph G = (V, E) 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 (p, x), 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 u, k is the degree of u, c1 ... 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 = d, type, [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
- 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
Sample Output 1
- 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, []
Sample Input 2
- 4
- 1 3 3 2 0
- 0 0
- 3 0
- 2 0
Sample Output 2
- 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, []
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代码
- #include <iostream>
- #include <cstdio>
- #include <fstream>
- #include <algorithm>
- #include <cmath>
- #include <deque>
- #include <vector>
- #include <queue>
- #include <string>
- #include <cstring>
- #include <map>
- #include <stack>
- #include <set>
- #include <sstream>
- #define mod 1000000007
- #define eps 1e-6
- #define ll long long
- #define INF 0x3f3f3f3f
- #define ME0(x) memset(x,0,sizeof(x))
- using namespace std;
- struct node
- {
- int parent;
- int left,right;//左子右兄弟表示法,l代表节点u的最左侧的子结点,r为u的右侧紧邻的兄弟节点
- };
- node a[];
- int D[];
- void getDepth(int u,int p)//递归求结点的深度
- {
- D[u]=p;
- if(a[u].right!=-)//当前结点存在右侧兄弟节点,不改变深度
- getDepth(a[u].right,p);
- if(a[u].left!=-)//存在最左侧子结点,深度+1
- getDepth(a[u].left,p+);
- }
- void print(int u)
- {
- cout<<"node "<<u<<": parent = "<<a[u].parent<<", depth = "<<D[u]<<", ";
- if(a[u].parent==-)//不存在父结点,即为根节点
- cout<<"root, [";
- else if(a[u].left==-)//没有子结点,即为叶
- cout<<"leaf, [";
- else
- cout<<"internal node, [";
- for(int i=,c=a[u].left; c!=-; ++i,c=a[c].right)
- {
- if(i)
- cout<<", ";
- cout<<c;//节点u的子结点列表从u的左侧子结点开始按顺序输出,直到当前子结点不存在右侧兄弟节点为止
- }
- cout<<"]"<<endl;
- }
- int main()
- {
- int n;
- cin>>n;
- for(int i=; i<n; ++i)//初始化
- a[i].left=a[i].parent=a[i].right=-;
- for(int i=; i<n; ++i)
- {
- int id,k;
- cin>>id>>k;
- for(int j=; j<k; ++j)
- {
- int c,l;
- cin>>c;
- if(j)
- a[l].right=c;
- else
- a[id].left=c;
- l=c;
- a[c].parent=id;
- }
- }
- int root;//根节点的编号
- for(int i=; i<n; ++i)
- if(a[i].parent==-)
- root=i;
- getDepth(root,);
- for(int i=; i<n; ++i)
- print(i);
- }
【Aizu - ALDS1_7_A】Rooted Trees(树的表达)的更多相关文章
- 有根树的表达 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 ...
- HDU p1294 Rooted Trees Problem 解题报告
http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...
- 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 ...
- 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 ...
- 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 ...
- HDU 1294 Rooted Trees Problem
题目大意:求有n个节点的树有几种? 题解:http://www.cnblogs.com/keam37/p/3639294.html #include <iostream> typedef ...
- Disharmony Trees 树状数组
Disharmony Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- HDU 5111 Alexandra and Two Trees 树链剖分 + 主席树
题意: 给出两棵树,每棵树的节点都有一个权值. 同一棵树上的节点的权值互不相同,不同树上节点的权值可以相同. 要求回答如下询问: \(u_1 \, v_1 \, u_2 \, v_2\):询问第一棵树 ...
- HDU1294 Rooted Trees Problem(整数划分 组合数学 DP)
讲解见http://www.cnblogs.com/IMGavin/p/5621370.html, 4 可重组合 dfs枚举子树的节点个数,相乘再累加 1 #include<iostream& ...
随机推荐
- llmp_install.zip
https://pan.baidu.com/s/14tQdE9CPe55P5m9rGm5ekw
- 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 ...
- cygwin使用笔记
1.在cygwin里访问Windows盘 cd /cygdrive/c cd c: 2.整合cygwin命令到Windows中 假设cygwin安装在d:/develop/cygwin,则将d:/de ...
- Python序列——字符串
字符串 1 string模块预定义字符串 2 普通字符串与Unicode字符串 3 只适用于字符串的操作 4 原始字符串 5 Unicode字符串操作符 内建函数 1 标准类型函数与序列操作函数 2 ...
- BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 1000 ...
- codeforces 702B B. Powers of Two(水题)
题目链接: B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- AutoIt:AutoIt比我想象的更加强大
前段时间,我一直认为,通过AutoIt进行自动化操作,也只有几个方法可以用,它们只是controlClick, controlsend等如下图: 我一直认为,AutoIt的所有的GUI 方法,都是用来 ...
- C++ 两款静态检查工具
pclint(收费) http://www.gimpel.com/html/pcl.htmpc-lint是资格最老,最强力的代码检查工具,但是是收费软件,并且配置起来有一点点麻烦. ccpchecke ...
- 洛谷P4719 动态DP —— 动态DP(树剖+矩乘)
题目:https://www.luogu.org/problemnew/show/P4719 感觉这篇博客写得挺好:https://blog.csdn.net/litble/article/detai ...
- OA系统
当用户登录时,根据用户名让他去查找用户的ID,编号,角色,权限,部门信息,等信息查找出来,用户表和角色表是一个一对多的关系,角色和权限也是一个一对多的关系,所以总共加起来有五张表,获取权限是通过用户名 ...