PAT 1004. Counting Leaves

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <functional>
#include <string>
#include <queue>

using namespace std;

vector<int> nodes[105];

bool isFirst = true;
void bfs(int root)
{
	queue<int> Q;
	Q.push(root);
	Q.push(-1);

	int num = 0;
	while(!Q.empty())
	{
		int cur = Q.front();
		Q.pop();
		if(cur == -1)
		{
			if(isFirst)
			{
				printf("%d",num);
				isFirst = false;
			}
			else
				printf(" %d",num);
			num=0;
			if(Q.empty())
				return ;
			Q.push(-1);
			continue;
		}
		if(nodes[cur].size()==0)
			num++;
		for(int i=0;i<nodes[cur].size();i++)
			Q.push(nodes[cur][i]);
	}
}
int main()
{
	int N,M;
	scanf("%d %d",&N,&M);
	for(int i=0;i<M;i++)
	{
		int id,K;
		scanf("%d %d",&id,&K);
		for(int k=0;k<K;k++)
		{
			int tmp;
			scanf("%d",&tmp);
			nodes[id].push_back(tmp);
		}
	}
	bfs(1);
	return 0;
}



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