就是层次遍历的模版,不算难。
#include <bits/stdc++.h>
using namespace std;
struct node {
int layer;
vector<int> v;
}Node[110];
vector<int> ans(110);
int main() {
int n, m, k, a, layer = 0;
scanf ("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
scanf ("%d %d", &a, &k);
Node[a].v.resize(k);
for (int j = 0; j < k; j++) scanf ("%d", &Node[a].v[j]);
}
queue<int> q;
Node[1].layer = 0;
q.push(1);
while (!q.empty()) {
int now = q.front();
q.pop();
if (Node[now].v.size() == 0) ans[Node[now].layer]++;
for (int i = 0; i < Node[now].v.size(); i++) {
int cld = Node[now].v[i];
Node[cld].layer = Node[now].layer + 1;
if (Node[cld].layer > layer) layer = Node[cld].layer;
q.push(cld);
}
}
for (int i = 0; i <= layer; i++) {
if (i != 0) printf (" ");
printf ("%d", ans[i]);
}
}