其实这道题一直没怎么明白意思,晕乎乎的,自己按照数据凑出来的,醉了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,l;
bool follow[1001][1001];
int level[1001];
int bfs(int t)
{
queue<int> q;
bool flag[1001];
memset(flag,false,sizeof(flag));
memset(level,0,sizeof(level));
q.push(t);
flag[t] = true;
level[t] = 0;
int count = 0;
while(!q.empty())
{
int top = q.front();
q.pop();
for(int i = 1; i <= n; i++)
{
if(follow[top][i] && !flag[i])
{
flag[i] = true;
level[i] = level[top]+1;
if(level[i] < l)
{
q.push(i);
}
count++;
}
}
}
return count;
}
int main()
{
while(scanf("%d%d",&n,&l) != EOF)
{
memset(follow,false,sizeof(follow));
for(int i = 1; i <= n; i++)
{
int num;
scanf("%d",&num);
for(int j = 0; j < num; j++)
{
int x;
scanf("%d",&x);
follow[x][i] = true;
}
}
int k;
scanf("%d",&k);
for(int i = 0; i < k; i++)
{
int id;
scanf("%d",&id);
printf("%d\n",bfs(id));
}
}
return 0;
}