您的位置:首页 > 其它

1004. Counting Leaves (30)

2017-04-06 14:28 417 查看


用vector存储每个非叶子节点的孩子,再一次dfs找出叶子节点以及最大深度。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
struct node{
vector<int> child;
};
node tree[105];
int deepnum[100]={0},maxdeep=0;
void DFS(int id,int deep){
deep++;
if(deep>maxdeep)
maxdeep=deep;
if(tree[id].child.empty())
deepnum[deep]++;
else{
for(int i=0;i<tree[id].child.size();i++)
DFS(tree[id].child[i],deep);
}
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int id,c,k;
//node tr;
scanf("%d%d",&id,&c);
while(c--){
scanf("%d",&k);
tree[id].child.push_back(k);
}
}
int id=1,deep=0;
DFS(id,deep);
printf("%d",deepnum[1]);
for(int i=2;i<=maxdeep;i++)
printf(" %d",deepnum[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: