PAT 1004
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[100];
int result[100];
vector<int> mark;
int max_depth;
// 创建二维数组,知一维的个数
void dfs(int cur,int depth){
if (v[cur].size()!=0){
int newdepth=depth+1;
for (size_t i = 0; i < v[cur].size(); i++)
{
dfs(v[cur][i],newdepth);
}
}
else{
result[depth]+=1;
max_depth=max(depth,max_depth);
return;
}
}
int main() {
fill(result,result+100,0);
int n, m;
// n nodes m none leaf nodes
cin>>n>>m;
// scanf("%d %d",%n,%m);
int id,k;
// k nums of id
for (int i=0;i<m;i++){
cin>>id;
cin >>k;
int child_id;
for (int j=0;j<k;j++){
cin>>child_id;
v[id].push_back(child_id);
}
}
dfs(1,1);
cout<<result[1];
for(int i=2;i<=max_depth;i++){
cout<<" "<<result[i];
}
return 0;
}
解题思路
树可以用二维数组来表示,(数据量不大的情况下)
同样的dfs,本题需要记录树的层数,则修改传参
测试点问题
只有一个根节点的情况