PAT 1004. Counting Leaves

#include<iostream>

#include<vector>

#include<queue>

using namespace std;





int main()

{

	int n,m,par_id,k,child_id,par[101],i,j;

	vector<int> v;

	queue<int> Q,Q_tmp;



	cin>>n>>m;

	for(i=1; i<=n; i++)

		par[i] = i;



	for(i=0; i<m; i++)

	{

		cin>>par_id;

		cin>>k;

		for(j=0; j<k; j++)

		{

			cin>>child_id;

			par[child_id] = par_id; //child_id的父亲是par_id

		}

	}



	bool isFirst = true;

	int t = 0;

	

	Q.push(1);

	while( !Q.empty() )

	{

		int iCount = 0;



		while( !Q.empty() )//遍历当前层次的节点,对没有孩子的节点进行计数。

		{

			bool hasChild = false;

			int curId = Q.front();

			Q.pop();

			for(i=1; i<=n; i++)

				if(par[i] == curId && curId != i)

				{

					hasChild = true;

					Q_tmp.push(i);

				}

			if(!hasChild)

				iCount++;

		}

		if(isFirst)

		{

			cout<<iCount;

			isFirst = false;

		}

		else

			cout<<" "<<iCount;



		//将Q_tmp中的内容复制到Q中,进入下一层次的计数

		while( !Q_tmp.empty() )

		{

			int t = Q_tmp.front();

			Q_tmp.pop();

			Q.push(t);

		}	

	}

	cout<<endl;



	return 0;

}

  

你可能感兴趣的:(count)