解题思路
1号用户关注了2号,就连一条2到1得边,表示2发的微博会被1转发
当询问2号用户微博的转发量时,使用bfs从2号开始一层一层遍历可到达的点,遍历过程中记录层数,
注意层数不能超过题目要求的L
C++ 代码
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 1010, M = 1e5 + 10;
int h[N], e[M], ne[M], idx;
int n, L, k;
int st[N];
void add(int a, int b)
{
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
void bfs(int u)
{
queue<int> q;
q.push(u);
int level = 1;
st[u] = true;
int res = 0;
while(!q.empty() && level <= L)
{
int sz = q.size(); //cout << sz << endl;
while(sz--)
{
int t = q.front();
q.pop();
for(int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if(!st[j])
{
st[j] = true;
res++;
q.push(j);
}
}
}
level++;
}
cout << res << endl;
}
int main()
{
memset(h, -1, sizeof h);
scanf("%d%d", &n, &L);
for(int i = 1; i <= n; i++)
{
int c;
scanf("%d", &c);
for(int j = 0; j < c; j++)
{
int t;
scanf("%d", &t);
add(t ,i);
}
}
scanf("%d", &k);
while(k--)
{
int num;
scanf("%d", &num);
memset(st, 0, sizeof st);
bfs(num);
}
return 0;
}