1004 Counting Leaves (30分)

1004 Counting Leaves (30分)
1004 Counting Leaves (30分)题意:构建树,判断每一层节点是否有叶节点,输出每一层叶节点的数目;
第一列:第一个数是节点的总数N,第二个数是无叶子点数目M;相当于输入多少行;
接下来输入M行,第一个是父节点,接下来是子节点数目K,后面是子节点数;
第一点,需要注意定义全局变量,会自动初始化;
第二点,深度的叠加需要加在广度优先中;
第三点,vector声明大小后,可以直接用下标读入数据;
第四点,最后输入空格,可以使用if判断,满足要求;
1004 Counting Leaves (30分)

在这里插入代码片
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int layer[101],max_depth=1;
struct Tree{
    vector<int> s;
    int depth=1;
}node[100];
void BFS(int root){
    queue<Tree>q;
    q.push(node[root]);
    while(!q.empty()){
        Tree top = q.front();
        q.pop();
        max_depth=max(max_depth,top.depth);
        if(top.s.empty())  layer[top.depth]++;
        for(int i = 0; i < top.s.size(); i++){
            node[top.s[i]].depth=top.depth+1;
            q.push(node[top.s[i]]);
        }
    }
}
int main(){
    int id_num,M,root,K;
    scanf("%d %d",&id_num,&M);
    for(int i = 0; i < M; i++){
        scanf("%d %d",&root,&K);
        node[root].s.resize(K);
        for(int j = 0; j < K;j++) scanf("%d",&node[root].s[j]);
    }
    BFS(1);
    for(int i = 1; i <= max_depth; i++){
        if(i!=1)printf(" ");
        printf("%d",layer[i]);
    }
}```

上一篇:study33


下一篇:337打家劫舍III