题意:给出每个用户及其关注的用户列表,求当某用户发布消息时,转发用户最多有多少个(给出转发层数上限)
注意:建图时,如果a关注了b,要建立b指向a的有向边,即a发布消息时,b能够转发
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int MAXN=1005;
int N,L;
struct Node
{
int id,layer;
};
vector<Node> Adj[MAXN];
int vis[MAXN];
int BFS(int s)
{
int num=0;
queue<Node> q;
Node p;
p.id=s;
p.layer=0;
q.push(p);
vis[s]=1;
while(!q.empty())
{
Node n=q.front();
q.pop();
int u=n.id;
for(int i=0;i<Adj[u].size();i++)
{
Node next=Adj[u][i];
next.layer=n.layer+1;
if(vis[next.id]==-1&&next.layer<=L)
{
q.push(next);
vis[next.id]=1;
num++;
}
}
}
return num;
}
int main()
{
Node user;
scanf("%d%d",&N,&L);
int k,t;
for(int i=1;i<=N;i++)
{
user.id=i;
scanf("%d",&k);
for(int j=0;j<k;j++)
{
scanf("%d",&t);
Adj[t].push_back(user);
}
}
int query,s,ans;
scanf("%d",&query);
for(int i=0;i<query;i++)
{
memset(vis,-1,sizeof(vis));
scanf("%d",&s);
ans=BFS(s);
printf("%d\n",ans);
}
return 0;
}