用BFS搜索一遍图,同时记录下每个结点的层数以及转发数
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
struct Node{
int v;
int layer;
}node[1100];
int n, k;
bool visited[1100];
int max_num[1100];
vector<Node> adj[1100];
void init(){
for(int i=0; i<1100; i++){
visited[i] = false;
}
}
int BFS(int index){
queue<int> q;
q.push(index);
visited[index] = true;
node[index].layer = 0;
int num = 0;
while(!q.empty()){
int temp = q.front();
q.pop();
if(node[temp].layer == k) return num;
for(int i=0; i<adj[temp].size(); i++){
int t = adj[temp][i].v;
if(!visited[t]){
q.push(t);
visited[t] = true;
node[t].layer = node[temp].layer + 1;
if(node[t].layer <= k){
num++;
}
}
}
}
return num;
}
int main(){
scanf("%d %d", &n, &k);
for(int i=1; i<=n; i++){
int num;
Node temp;
temp.v = i;
scanf("%d", &num);
for(int j=0; j<num; j++){
int bh;
scanf("%d", &bh);
adj[bh].push_back(temp);
}
}
for(int i=1; i<=n; i++){
init();
max_num[i] = BFS(i);
}
int m;
scanf("%d", &m);
for(int i=0; i<m; i++){
int ans;
scanf("%d", &ans);
printf("%d\n", max_num[ans]);
}
return 0;
}