#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 1010;
int g[N][N], visit[N];
int n, k, l;
void bfs(int x) {
queue<int>q;
q.push(x);
visit[x] = 1;
int res = 0, depth = 0;
while (q.size() && depth <= l) {
int size = q.size();//每一层的个数
for (int i = 0; i < size; i++) {//循环完后这一层点全部出队
int t = q.front();
for (int j = 1; j <= n; j++) {
if (g[t][j] && !visit[j]) {
q.push(j);
visit[j] = 1;
res++;
}
}
q.pop();
}
depth++;
}
cout << res - q.size() << "\n";//while因为层数限制结束后,queue中可能有下一层的点
}
int main() {
int m, t, q;
cin >> n >> l;
for (int i = 1; i <= n; i++) {
cin >> m;
for (int j = 0; j < m; j++) {
cin >> t;
g[t][i] = 1;
}
}
cin >> k;
for (int i = 0; i < k; i++) {
cin >> q;
memset(visit, 0, sizeof(visit));
bfs(q);
}
return 0;
}
05-10
268
07-25
154
03-15
644
10-16
558
10-13
793