题目链接:https://www.patest.cn/contests/pat-a-practise/1004
题意,给我们一棵家族树,给出这棵树的每一条边,问我们每一层没有子节点的节点数。
题意是非常的清晰,我们只需要在建立好的树上从根节点(01)开始遍历整棵树,在遍历的时候记录当前的层数即可。
#include <queue> #include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 100+5; vector<int> tree[maxn]; int level[maxn], sum[maxn], Max; int main() { int n, m; scanf("%d%d", &n, &m); level[1] = sum[1] = 0; for(int i=0; i<m; i++) { int x, num; scanf("%d%d", &x, &num); for(int j=0; j<num; j++) { int leaf; scanf("%d", &leaf); tree[x].push_back(leaf); } } Max = 0; queue<int> q; q.push(1); while(!q.empty()) { int x = q.front(); q.pop(); if(tree[x].size() == 0) { sum[level[x]]++; continue; } for(int i=0; i<tree[x].size(); i++) { int y = tree[x][i]; level[y] = level[x] + 1; Max = max(Max, level[y]); q.push(y); } } // printf("%d\n", Max); for(int i=0; i<=Max; i++) { printf("%d", sum[i]); if(i != Max) { printf(" "); } else { printf("\n"); } } }