1004 Counting Leaves (30)(30 分)

A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.

Input

Each input file contains one test case. Each case starts with a line containing 0 < N < 100, the number of nodes in a tree, and M (< N), the number of non-leaf nodes. Then M lines follow, each in the format:

ID K ID[1] ID[2] ... ID[K]

where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID's of its children. For the sake of simplicity, let us fix the root ID to be 01.

Output

For each test case, you are supposed to count those family members who have no child for every seniority levelstarting from the root. The numbers must be printed in a line, separated by a space, and there must be no extra space at the end of each line.

The sample case represents a tree with only 2 nodes, where 01 is the root and 02 is its only child. Hence on the root 01 level, there is 0 leaf node; and on the next level, there is 1 leaf node. Then we should output "0 1" in a line.

Sample Input

2 1
01 1 02

Sample Output

0 1

参考这个:http://www.cnblogs.com/linkstar/p/5674895.html
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std;
//给出节点总数和非叶节点数,并且给出非叶节点的子节点,输出每层有几个叶节点。
struct node{
int hir;
int father;
int son;
node(){
hir=;son=;father=;}
}node[];
int ceng[]; int main()
{
//首先我的问题是这个树怎么存的,用数组来存?
//关键是要表示出来层数信息。
int n,m;
//freopen("1.txt","r",stdin);
cin>>n>>m;
int id,k,idk;
node[].hir=;
for(int i=;i<m;i++){
cin>>id>>k;
node[id].son+=k;
for(int j=;j<k;j++){
cin>>idk;
node[idk].father=id;//层数+1
}
}
//接下来就是要判断每层上一共有多少个叶子节点了。
//有一个小小的疑问就是,是不是层数按序号输入的呢?还是说每次找第几层的都要把所有的给便利一下?
//需要注意的是有可能新输入的父节点等级并没有确定。
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(node[j].father==i)
//node[i].son++;
node[j].hir=node[i].hir+;//从第一个点也就是根节点开始遍历,那么肯定可以顺序确定。
}
} int maxs=;
for(int i=;i<=n;i++){
if(node[i].son==){
ceng[node[i].hir]++;
if(node[i].hir>maxs)
maxs=node[i].hir;
}
}
for(int i=;i<=maxs;i++){
cout<<ceng[i];
if(i!=maxs)cout<<" ";
}
return ;
}

//大意就是输入一个值表示树中节点总数,另一个数表示非叶节点总数,接下来就是输入树的层次结构。要求判断出每一层有多少个叶节点并且输出。

第一次提交0分,因为是我有中间输入忘了注释,和freopen没有注释掉。之后提交是19分,看完链接中的代码之后就发现是因为我没有考虑点输入的先后顺序,有可能父节点输入的时候它的等级并没有确定,所以就需要一个字段father来记录,最后再有一个两层循环(这个时间复杂度就上去了,不过由于题目数据比较小,所以可用)。先记录父子关系,再循环确定层次关系,最后用哈希数组判断每层的叶结点个数即可。总的来说还可以。

PAT Counting Leaves[一般]的更多相关文章

  1. PAT 解题报告 1004. Counting Leaves (30)

    1004. Counting Leaves (30) A family hierarchy is usually presented by a pedigree tree. Your job is t ...

  2. PAT甲1004 Counting Leaves【dfs】

    1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...

  3. PAT 1004 Counting Leaves (30分)

    1004 Counting Leaves (30分) A family hierarchy is usually presented by a pedigree tree. Your job is t ...

  4. PAT Advanced 1004 Counting Leaves

    题目与翻译 1004 Counting Leaves 数树叶 (30分) A family hierarchy is usually presented by a pedigree tree. You ...

  5. 1004 Counting Leaves ——PAT甲级真题

    1004 Counting Leaves A family hierarchy is usually presented by a pedigree tree. Your job is to coun ...

  6. PAT_A1004#Counting Leaves

    Source: PAT A1004 Counting Leaves (30 分) Description: A family hierarchy is usually presented by a p ...

  7. 1004. Counting Leaves (30)

    1004. Counting Leaves (30)   A family hierarchy is usually presented by a pedigree tree. Your job is ...

  8. PAT1004:Counting Leaves

    1004. Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A fam ...

  9. PTA (Advanced Level) 1004 Counting Leaves

    Counting Leaves A family hierarchy is usually presented by a pedigree tree. Your job is to count tho ...

随机推荐

  1. 推荐系统之隐语义模型(LFM)

    LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...

  2. hdu_1086 You can Solve a Geometry Problem too(计算几何)

    http://acm.hdu.edu.cn/showproblem.php?pid=1086 分析:简单计算几何题,相交判断直接用模板即可. 思路:将第k条直线与前面k-1条直线进行相交判断,因为题目 ...

  3. VS 2008 头文件库文件设置

    在程序开发中,很多时候需要用到别人开发的工具包,如OpenCV和itk.一般而言,在vs2008中,很少使用源文件,大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll). 如果 ...

  4. Android单例模式

    Android设计模式系列(3)--SDK源码之单例模式:http://www.cnblogs.com/qianxudetianxia/archive/2011/08/07/2130306.html ...

  5. JavaScript中Array

    一,针对于数组 const arr = ['a','b','c','d']; Array.indexOf  将“返回第一次出现给定元素的索引”; console.log(arr.indexOf('b' ...

  6. sencha touch Container 监听超链接插件

    有时候内容直接从后台获取,有可能包含超链接,打包成应用之后,点击会造成不好的后果,这样做能够用外部浏览器打开.需要Cordova支持 监听插件代码: /* *监听a标签,用外部浏览器打开链接 */ E ...

  7. Nginx安装及配置文件nginx.conf详解

    1.安装Nginx 在安装Nginx之前,需确保系统已经安装了gcc. openssl-devel. pcre-devel和zlib-devel软件库. 下面是Nginx安装过程: wget http ...

  8. mongodb的远程访问

    1,centos6上安装mongodb:2,新建可以远程访问的用户,以便可以远程访问: [root@localhost ~]# cd /usr/local/mongodb/bin/ [root@loc ...

  9. nginx虚拟目录配置

    参考文章:https://blog.csdn.net/whatday/article/details/50649461 1. location ~ ^/awstats/ { root /home/aw ...

  10. 理解Buffer

    Buffer对象是Node.js用来处理二进制数据的一个接口.JavaScript比较擅长处理Unicode数据,对于处理二进制格式的数据(比如TCP数据流),就不太擅长.Buffer对象就是为了解决 ...