2019年2月14日
21:58
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 2e3 +5;
vector<int> a[maxn];
int flag[maxn], level[maxn];
int n, l, p[105];
int bfs(int x)
{
queue<int> q;
memset(flag, 0, sizeof(flag));
memset(level, 0, sizeof(level));
int ans = 0, y = x;
q.push(y);
flag[y] = true;
while(!q.empty())
{
y = q.front();
q.pop();
if(level[y] == l)
break;
for(int i = 0; i < a[y].size() ; i++)
{
int r = a[y][i];
if(!flag[r])
{
ans++;
flag[r] = 1;
q.push(r);
level[r] = level[y] + 1;
}
}
}
return ans ;
}
int main()
{
while(cin >> n >> l)
{
for(int i = 0; i < n; i++)
{
int k, x;
cin >> k;
for(int j = 0; j < k; j++)
{
cin >> x;
a[x].push_back(i + 1);
}
}
/*for(int i = 1; i <= n; i++)
{
cout << i << " ";
for(int j = 0; j < a[i].size(); j++)
cout << a[i][j] << " ";
cout << endl;a
}*/
int t, y, cnt;
cin >> t;
for(int i = 0; i < t; i++)
{
cin >> y;
cout << bfs(y) << endl;
}
}
}