PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs

统计每层的叶子节点个数
建树,然后dfs即可

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
/*
统计每层的叶子节点个数
建树,然后dfs即可
*/
const int maxn=105;
int n,m;
int layer[maxn]; //统计每层的叶子节点个数
int maxlayer=0;
vector<int>node[maxn];

void dfs(int u,int level){
    int num=node[u].size();
    if(num==0){
        layer[level]++;
        if(level>maxlayer)
            maxlayer=level;
        return;
    }
    for(int i=0;i<node[u].size();i++){
        dfs(node[u][i],level+1);
    }
}
int main()
{
    memset(layer,0,sizeof(layer));
    scanf("%d %d",&n,&m);
    int u,v,k;
    for(int i=0;i<m;i++){
        scanf("%d %d",&u,&k);
        for(int i=0;i<k;i++){
            scanf("%d",&v);
            node[u].push_back(v);
        }
    }
    dfs(1,0);
    printf("%d",layer[0]);
    for(int i=1;i<=maxlayer;i++)
        printf(" %d",layer[i]);
    return 0;
}

时间: 2024-10-09 21:42:40

PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs的相关文章

PAT甲题题解-1103. Integer Factorization (30)-(dfs)

该题还不错~. 题意:给定N.K.P,使得可以分解成N = n1^P + - nk^P的形式,如果可以,输出sum(ni)最大的划分,如果sum一样,输出序列较大的那个.否则输出Impossible. dfs枚举,为了防止超时,这里要预先将从1开始的i^p的值存储在factor数组中,直到i^p>n.然后dfs深度优先搜索,相当于把问题一步步分解,即若第一个因子是n1,则接下来我们要判断N-n1^p.k-1是否可行.同时存储当前因子的总和sum,要取sum最大的:还有上一次相加的因子的索引las

PAT甲题题解-1049. Counting Ones-数学问题

n位数,总共有0~10^n-1共计10^n个数那么所有数出现的总次数变为n*(10^n)个数1出现的次数便是十分之一,所以n位数中,1出现的次数为n*10^(n-1)知道这一个后,接下来就方便求了. 举个例子就方便理解了 3125 从头到尾for一遍 3:那么便有三组1000以内的:0~999,1000~1999,2000~29991000以内的1的个数为300,所以共有3*300=900但是又因为1000~1999中千位上的1也要算进去,有1000个所以0~2999中总共有900+1000=1

PAT甲题题解-1091. Acute Stroke (30)-BFS

题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写,想有没有别的办法.然而结果是,实在想不出别的办法了,所以还是尝试写写dfs.bfs. 一开始先用了dfs,最后两个样例段错误,估计是栈溢出了.之所以dfs栈溢出,因为dfs的时候每个状态都会存储在堆栈里,就好比dfs的第一个状态,一直保存到最后整个dfs结束.而bfs是存储在队列中,每次队列都会有状态取

PAT甲题题解-1072. Gas Station (30)-dijkstra最短路

题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平均值还是一样,就输出按照顺序排列加油站编号最小的. 分析:加油站之间也是彼此有路连接的,所以最短路径计算的时候也要把加油站算上,是双向边,所以边的数组大小得开两倍.加油站编号记为n+1~n+m,对这些点用dijkstra计算最短路径即可,这里顺便在dijkstra中进行了剪枝处理,不剪枝也没事. #

PAT甲题题解-1111. Online Map (30)-PAT甲级真题(模板题,两次Dijkstra,同时记下最短路径)

题意:给了图,以及s和t,让你求s到t花费的最短路程.最短时间,以及输出对应的路径.   对于最短路程,如果路程一样,输出时间最少的. 对于最短时间,如果时间一样,输出节点数最少的.   如果最短路程和最短时间路径一样,合并输出一次即可. 纯粹就是练习dijkstra,没什么难的. 第一次dijkstra求最短路程,记录下每个节点的路程和时间. 第二次dijkstra求最短时间,记录下每个节点的时间和经过的节点数. pre数组用来存储前驱节点,保存路径 #include <iostream>

PAT甲题题解-1022. Digital Library (30)-map映射+vector

博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789235.html特别不喜欢那些随便转载别人的原创文章又不给出链接的所以不准偷偷复制博主的博客噢~~ 题意:给出n本书的id.名称.作者.多个关键词.出版社.出版年然后给出m个查询,每个查询包含查询的种类.对应的内容针对每个查询,让你输出所有符合的书的id,从小到大排序,没有的话则输出No Found 首先把每个book的信息都读取处理好,然后按照id排个序

PAT 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 Each input file contains one test case. Each case starts with a line containing 0 < N < 100, the number of nodes in a tre

1004. Counting Leaves (30)——PAT (Advanced Level) Practise

题目信息: 1004. Counting Leaves (30) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue 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 contai

PTA 1004 Counting Leaves (30)(30 分)(建树dfs或者bfs,未AC 段错误)

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 < 10