PAT1004. Counting Leaves

一个dfs问题

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
const int N=102;
vector<int>son[N];
int leaf[N],maxdeep;
void dfs(int k,int deep){
  maxdeep=max(maxdeep,deep);
  if(son[k].size()==0)
    leaf[deep]++;
  else{
    for(auto &x:son[k])
      dfs(x,deep+1);
  }
}
int main(){
  int total,nonleaf;
  cin>>total>>nonleaf;
  while(nonleaf--){
    int papa,cnt,k;
    cin>>papa>>cnt;
    while(cnt--){cin>>k;son[papa].push_back(k);}
  }
  dfs(1,0);
  for(int i=0;i<=maxdeep;++i){
    if(i)cout<<' ';
    cout<<leaf[i];
  }
  return 0;
}


你可能感兴趣的:(PAT1004. Counting Leaves)