PAT A 1004. Counting Leaves (30)【vector+dfs】

题目链接:https://www.patest.cn/contests/pat-a-practise/1004

大意:输出按层次输出每层无孩子结点的个数

思路:vector存储结点,dfs遍历

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn=1e2+10;
 8 int n,m,k,x,f[maxn],deep,y;
 9 vector<int> t[maxn];
10 void init()
11 {
12     cin>>n>>m;
13     while(m--)
14     {
15         cin>>x>>k;
16         while(k--)
17         {
18             cin>>y;
19             t[x].push_back(y);
20         }
21     }
22 }
23 void dfs(int x,int dep)
24 {
25    deep=max(dep,deep);
26    if(t[x].size()==0)f[dep]++;
27    for(int i=0;i<t[x].size();i++)
28         dfs(t[x][i],dep+1);
29 }
30 
31 int main()
32 {
33   init();
34   dfs(1,0);
35   for(int i=0;i<=deep;i++)
36     printf("%s%d",i?" ":"",f[i]);
37   printf("\n");
38  return 0;
39 }

 

posted @ 2016-11-14 18:23  demianzhang  阅读(201)  评论(0编辑  收藏  举报