PAT甲级 1004 Counting Leaves (30分)

这种树形关系的题,像祖辈关系,师徒关系的,第一考虑的就应该是dfs或者并查集,这道题我用的dfs,代码很短,套一套,略微修改一下基本上就ok了!

#include
using namespace std;
int child[105]={0};
vector<int> nodes[105];
int maxlevel = 0;
void dfs(int node,int level)
{
	if(nodes[node].size() ==0)
	{child[level] +=1;
	if(level>maxlevel)
	maxlevel = level;
	}
	else
	{
		for(int i=0;i<nodes[node].size();i++)
		dfs(nodes[node][i],level+1);
	
}}
main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<m;i++)
	{
		int id;
		scanf("%d",&id);
		int k;
		scanf("%d",&k);
		for(int j=0;j<k;j++)
		{
			int a;
			scanf("%d",&a);
			nodes[id].push_back(a);
		}
	}
	dfs(1,0);
	for(int i=0;i<=maxlevel;i++)
	{
		if(i==0)
		printf("%d",child[i]);
		else
		printf(" %d",child[i]);
	}
 } 

你可能感兴趣的:(PAT甲级)