pat 1004

1004 Counting Leaves (30分)  

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

Input Specification:

Each input file contains one test case. Each case starts with a line containing 0, the number of nodes in a tree, and M (<), 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.

The input ends with N being 0. That case must NOT be processed.

Output Specification:

For each test case, you are supposed to count those family members who have no child for every seniority level starting 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




树的简单操作
#include <algorithm> #include <cstdio> #include <cstring> #include <iostream> #include <stack> using namespace std; #define ll long long #define M 105 #define _for(i, a, b) for (int i = (a); i <= (b); i++) struct edge{     int v, next;     edge(int v=0,int next=0):v(v),next(next){} }e[M<<1]; int head[M],Size=0,cnt[M],max_height; void insert(int u,int _v){     e[Size].v = _v, e[Size].next = head[u];     head[u] = Size++; } void dfs(int u,int h){     max_height = max(h, max_height);//记录下树的高度     int s = 0;     for (int i = head[u]; ~i;i=e[i].next){         int _v = e[i].v;         dfs(_v, h + 1);         s++;     }     if(s==0)         cnt[h]++; } int main() {     memset(head, -1, sizeof(head));     int n, m;     cin >> n >> m;     while(m--){         int id,k, v;         cin >>id>> k;         while(k--){             cin >> v;             insert(id, v);         }     }     dfs(1,1);     _for(i,1,max_height){         if(i==1){             printf("%d", cnt[i]);         }else{             printf(" %d", cnt[i]);         }     }     puts("");     return 0; }
上一篇:PAT菜鸡笔记1004 Counting Leaves


下一篇:NOIP 模拟 1004