Note
Code
#include<bits/stdc++.h>
using namespace std;
int L;
vector<int> v[1010];
bool isvisit[1010]={false};
struct node{
int root,level;
node(int r,int l){
root=r;
level=l;
}
};
int bfs(int root){
int cnt=0;
memset(isvisit,false,sizeof(isvisit));
queue<node> q;
isvisit[root]=false;
q.push(node(root,0));
while(!q.empty()){
node data=q.front();
q.pop();
if(data.level<=L&&data.root!=root) cnt++;
else continue;
for(int i=0;i<v[data.root].size();i++){
int num=v[data.root][i];
if(isvisit[num]==false)
q.push(node(num,data.level+1));
isvisit[num]=true;
}
}
return cnt;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int n,m,u,k,q;
cin>>n>>L;
for(int i=1;i<=n;i++){
scanf("%d",&m);
for(int j=0;j<m;j++){
scanf("%d",&u);
v[u].push_back(i);
}
}
scanf("%d",&k);
while(k--){
scanf("%d",&q);
printf("%d\n",bfs(q));
}
return 0;
}