方法:BFS。
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int N,L;
vector<int> child[1010];
bool vis[1010];
int layer[1010];
void BFS(int s){
fill(vis,vis+1010,0);
fill(layer,layer+1010,0);
queue<int> q;
q.push(s);
vis[s]=true; //
int countf=0;
while(!q.empty()){
int t=q.front();
q.pop();
if(layer[t]>L) break; //
if(layer[t]>0) countf++; //
for(int i=0;i<child[t].size();i++){
if(vis[child[t][i]]==false){
layer[child[t][i]]=layer[t]+1;
vis[child[t][i]]=true;
q.push(child[t][i]);
}
}
}
printf("%d\n",countf);
}
int main(){
scanf("%d%d",&N,&L);
for(int i=1;i<=N;i++){
int numf,temp;
scanf("%d",&numf);
for(int j=0;j<numf;j++){
scanf("%d",&temp);
child[temp].push_back(i);
}
}
int numq,start;
scanf("%d",&numq);
for(int i=0;i<numq;i++){
scanf("%d",&start);
BFS(start);
}
return 0;
}