BFS,题意比较难懂,是求离query L层的总共人数
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
using namespace std;
const int N = 1005;
struct E
{
int node;
};
vector<E> v[N];
int mark[N];
void add_edge(int a, int b)
{
E tmp;
tmp.node = b;
v[a].push_back(tmp);
}
struct ANS
{
int num;
int lev;
};
void BFS(int x, int ll)
{
queue<ANS> q;
ANS tmp;
tmp.lev = 0;
tmp.num = x;
q.push(tmp);
mark[x] = 1;
int level = 0;
int ans = 0;
while (!q.empty())
{
ANS top = q.front();
int node = top.num;
int lev = top.lev;
if (lev >= ll) break;
q.pop();
for (int i = 0; i < v[node].size(); i++)
{
if (mark[v[node][i].node] == 0)
{
mark[v[node][i].node] = 1;
tmp.lev = lev + 1;
tmp.num = v[node][i].node;
//printf("%d %d
", tmp.num, tmp.lev);
ans++;
q.push(tmp);
}
}
}
printf("%d
", ans);
}
int main()
{
int n, ll;
while (scanf("%d%d", &n, &ll) != EOF)
{
for (int i = 1; i <= n; i++)
{
int k, a;
scanf("%d", &k);
while (k--)
{
scanf("%d", &a);
add_edge(a, i);
}
}
int query_num, query;
scanf("%d", &query_num);
while (query_num--)
{
scanf("%d", &query);
memset(mark, 0, sizeof(mark));
BFS(query, ll);
}
}
return 0;
}