题目链接:点击打开链接
题目大意:求每一层的叶子节点个数(从 根节点 (1th 层) 开始)。
解题思路:略。
AC 代码
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); #define INF 0x3f3f3f3f using namespace std; typedef long long ll; map<int,vector<int> > miv; int rcd[110]; int len; void dfs(int pid,int lvl) { if(miv[pid].empty()) { ++rcd[lvl]; len=max(len,lvl); return; } for(vector<int>::iterator it=miv[pid].begin(); it!=miv[pid].end(); it++) dfs(*it,lvl+1); } int main() { int n,m,pid,cid,k; while(~scanf("%d%d",&n,&m)) { mem(rcd,0); miv.clear(); len=0; while(m--) { scanf("%d%d",&pid,&k); while(k--) { scanf("%d",&cid); miv[pid].push_back(cid); } } dfs(1,0); printf("%d",rcd[0]); for(int i=1;i<=len;i++) printf(" %d",rcd[i]); puts(""); } return 0; }