//标准的层次遍历模板
//居然因为一个j写成了i,debug半天。。。。。解题前一定要把结构和逻辑想清楚,不能着急动手,理解清楚题意,把处理流程理清楚再动手,恍恍惚惚的写出来自己慢慢debug吧
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=1001;
struct node
{
	int level;
	vector<int>child;
};
node list[maxn];
int n,l;
bool vis[maxn];
int bfs(int v)
{
	for(int j=0;j<maxn;j++){list[j].level=0;vis[j]=false;}
	queue<int>q;
	q.push(v);vis[v]=true;
	int cnt=0;
	while(!q.empty())
	{
		int tmp=q.front();q.pop();
		if(list[tmp].level>l)break;
		cnt++;
		for(int i=0;i<list[tmp].child.size();i++)
		{
			int s=list[tmp].child[i];	
			if(!vis[s])
			{
				list[s].level=list[tmp].level+1;
				vis[s]=true;
				q.push(s);
			}
		}
	}
	return cnt-1;
}
int main()
{
	freopen("input.txt","r",stdin);
	int i,j,k,tmp;
	while(scanf("%d%d",&n,&l)!=EOF)
	{
		for(i=1;i<=n;i++)
		{
			scanf("%d",&k);
			for(j=0;j<k;j++)
			{
				scanf("%d",&tmp);
				list[tmp].child.push_back(i);
			}
		}
		scanf("%d",&k);
		for(i=0;i<k;i++)
		{
			scanf("%d",&tmp);
			int ans=bfs(tmp);
			printf("%d\n",ans);
		}
	}
	return 0;
}
PAT1076. Forwards on Weibo(标准bfs模板)
原文:http://www.cnblogs.com/zeroArn/p/5244847.html