参考文献
https://www.acwing.com/activity/content/code/content/324375/
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
vector<int> G[N];
bool inQ[N];
int n, l;
int bfs(int x)
{
memset(inQ,0,sizeof(inQ));
queue<int> Q;
Q.push(x);
inQ[x] = true;
int res = 0;
for(int i = 0; i < l; ++i)
{
int len = Q.size();
res += len;
while(len--) //图的层次遍历
{
auto t = Q.front(); Q.pop();
for(const auto& it: G[t])
{
if(inQ[it]) continue;
inQ[it] = true;
Q.emplace(it);
}
}
}
return res + Q.size() -1;
}
int k = 0;
int main()
{
cin >> n >> l;
for(int i =1 ;i <= n; ++i)
{
int num;
cin >> num;
while(num--)
{
int x = 0;
cin >> x;
G[x].push_back(i); //i关注x,则有一条从x指向i的边
}
}
cin >> k;
while(k--)
{
int x = 0;
cin >> x;
int res = bfs(x);
cout << res << endl;
}
return 0;
}