HACK数据:
7
1
2
3
4
5
6

如果没有把 1 指向自己,下面这份代码的贪心策略就会出错。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e3+5;
int n,a,dep[maxn],f[maxn],ans;
bool vis[maxn];
pair <int,int> p[maxn];
vector <int> e[maxn];
void dfs(int now,int pre){
f[now]=pre,dep[now]=dep[pre]+1;
for(int i:e[now]) if(i!=pre) dfs(i,now);
}void color(int now,int pre,int dp){
if(dp>2) return ;
vis[now]=1;
for(int i:e[now]) color(i,now,dp+1);
}signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n ;
for(int i=2;i<=n;i++) cin >> a ,e[i].push_back(a),e[a].push_back(i);
dfs(1,0);
for(int i=1;i<=n;i++) p[i]={dep[i],i};
sort(p+1,p+n+1);
for(int i=n;i;i--){
if(!vis[p[i].second]){
ans++;
color(f[f[p[i].second]],0,0);
}
}cout << ans ;
return 0;
}