#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
int n, f[1005], ans[1005], t[1005];
vector<int> G[1005];
void dfs(int x, int fa)
{
int cnt = 0;
for (int y : G[x])
{
if (y == fa) continue;
dfs(y, x);
t[++cnt] = f[y];
}
// if (!cnt) return;
sort(t + 1, t + 1 + cnt);
for (int i = cnt; i >= 1; i--)
f[x] = max(f[x], t[i]+cnt-i+1);
}
int main()
{
cin >> n;
for (int i = 2, x; i <= n; i++)
{
cin >> x;
G[x].push_back(i), G[i].push_back(x);
}
for (int i = 1; i <= n; i++)
{
memset(f, 0, sizeof(f));
memset(t, 0, sizeof(t));
dfs(i, -1);
ans[i] = f[i];
}
int minn = 1e9;
for (int i = 1; i <= n; i++) minn = min(minn, ans[i]);
cout << minn+1 << endl;
for (int i = 1; i <= n; i++)
if (ans[i] == minn) cout << i << " ";
return 0;
}
是朴素的 O(n2logn) 做法,不知道错在哪里。