本题思路
考虑转发,且有层数(即转发最多通过几个非直接follows),所以考虑用BFS,因为BFS不涉及递归之类的,所以要用Node设置layer值。
#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=1010;
struct node
{
int layer;
int id;
};
vector<int> ans;
bool vis[maxn]={false};
vector<node>adj[maxn];
int G[maxn][maxn];
void BFS(int l,int id,int &num)
{
vis[id]=true;
queue<node> q;
node temp;
temp.id=id;
temp.layer=0;
q.push(temp);
while(!q.empty())
{
temp=q.front();
q.pop();
int u=temp.id;
for(int i=0;i<adj[u].size();i++)
{
node v=adj[u][i];
v.layer=temp.layer+1;
if(v.layer<=l&&vis[v.id]==false)
{
q.push(v);
vis[v.id]=true;
num++;
}
}
}
}
int main()
{
int n,l,num,id,k;
node user;
cin>>n>>l;
for(int i=1;i<=n;i++)
{
user.id=i;
scanf("%d",&num);
for(int j=1;j<=num;j++)
{
scanf("%d",&id);
adj[id].push_back(user);
}
}
cin>>k;
for(int i=0;i<k;i++)
{
memset(vis,false,maxn);
scanf("%d",&id);
num=0;
BFS(l,id,num);
ans.push_back(num);
}
for(int i=0;i<ans.size();i++)
{
printf("%d\n",ans[i]);
}
}