考虑BFS,需要注意的就是A follow B 形成的路径是 B->A,因为 A 关注 B 则 B发的微博可以被 A 转发,然后每次 query 的时候走一遍 BFS 查找。
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
vector<vector<bool>> graph;
int main(){
int n, l, k;
scanf("%d%d", &n, &l);
graph.resize(n+1, vector<bool>(n+1, false));
for(int i = 1; i <= n; ++i){
int num, id;
scanf("%d", &num);
for(int j = 0; j < num; ++j){
scanf("%d", &id);
graph[id][i] = true;
}
}
scanf("%d", &k);
for(int i = 0; i < k; ++i){
int id;
scanf("%d", &id);
queue<pair<int,int>> Q;
Q.emplace(id, 0);
vector<bool> used(n+1, false);
used[id] = true;
int sum = 0;
// bfs
while(!Q.empty()){
auto p = Q.front(); Q.pop();
int u = p.first, level = p.second;
if(level == l) break;
for(int i = 1; i <= n; ++i){
if(!used[i] && graph[u][i]){
used[i] = true;
++sum;
Q.emplace(i, level+1);
}
}
}
printf("%d\n", sum);
}
return 0;
}