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. 【swoole2.0】 PHP + swoole2.0 初体验

    背景: centos7   PHP7.1   swoole2.0 准备工作: 一.  swoole  扩展安装 1 下载swoole cd /usr/local wget -c https://git ...

  2. 【css系列】创建网页加载进度条

    一.最简单或者明显的方式是使用定时器 1.在网页中加入布局覆盖真实网页内容 2.使用定时器确定加载所用时间的长短,其实并不是真正的加载进度实现 <!DOCTYPE html> <ht ...

  3. 小程序判断是否授权源码 auth.js

    一.auth.js const configGlobal = require('../config/config_global.js'); var util = require('function.j ...

  4. 剑指offer题目记录

    1.如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStri ...

  5. vi 撤销操作

    'u' : 撤销上一个编辑操作 'ctrl + r' : 恢复,即回退前一个命令 'U' : 行撤销,撤销所有在前一个编辑行上的操作

  6. C# List<T> 泛型

    1.简介 所属命名空间:System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList< ...

  7. 解决使用Foxmail客户端软件不能收取腾讯企业邮箱的全部邮件

    一般说来,使用Foxmail客户端软件收取邮箱时,需要作如下几步: 1.进入邮箱web界面授权开启POP3/SMTP服务.IMAP/SMTP等服务 2.在邮箱web界面配置收取选项,可选择收取全部邮件 ...

  8. 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法

    [POJ2888]Magic Bracelet 题意:一个长度为n的项链,有m种颜色的珠子,有k个限制(a,b)表示颜色为a的珠子和颜色为b的珠子不能相邻,求用m种珠子能串成的项链有多少种.如果一个项 ...

  9. python nose测试框架全面介绍八---接口测试中非法参数的断言

    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...

  10. 什么是webpack?

    https://www.webpackjs.com/concepts/ https://webpack.github.io/ 本质上,webpack 是一个现代 JavaScript 应用程序的静态模 ...