#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
const int N = 100010;
int n;
int e[N], ne[N], idx, h[N];
int level[N];
int maxlevel = -1;
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);
while (q.size())
{
auto t = q.front();
q.pop();
int l = level[t];
maxlevel = max(l, maxlevel);
for (int i = h[t]; ~i; i = ne[i])
{
int j = e[i];
q.push(j);
level[j] = l + 1;
}
}
}
int main()
{
memset(h, -1, sizeof h);
cin >> n;
int root;
for (int i = 1; i <= n; i++)
{
int id;
cin >> id;
if (id == -1) root = i;
else add(id, i);
}
bfs(root);
vector<int> ans;
for (int i = 1; i <= n; i++)
if(level[i] == maxlevel)
ans.push_back(i);
cout << maxlevel + 1 << endl;
cout << ans[0];
for(int i = 1; i < ans.size(); i++) cout << ' ' << ans[i];
}
L2-026 小字辈(BFS模板的应用)
最新推荐文章于 2024-05-20 20:08:58 发布