原题链接:A1076 Forwards on Weibo
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include <ctime>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
const int MAX = 1010;
bool Graph[MAX][MAX] = {{0}};
int N, L, M, K, userID;
int BFS(int v)
{
queue<int> Q;
bool visited[MAX] = {0};
visited[v] = 1;
Q.push(v);
int level = 0, cnt = 0, last = v;
while(!Q.empty() && level < L)
{
v = Q.front();
Q.pop();
for(int i=1; i<=N; i++)
{
if(Graph[v][i] && !visited[i])
{
Q.push(i);
visited[i] = 1;
cnt++;
}
}
if(last == v)
{
last = Q.back();
level++;
}
}
return cnt;
}
int main()
{
scanf("%d %d", &N, &L);
for(int i=1, j; i<=N; i++)
{
scanf("%d", &M);
for(j=0; j<M; j++)
{
scanf("%d", &userID);
Graph[userID][i] = 1;
}
}
scanf("%d", &M);
for(int i=0; i<M; i++)
{
scanf("%d", &userID);
printf("%d\n", BFS(userID));
}
return 0;
}