http://codeforces.com/contest/931/problem/C
一棵倒着的树,每个节点都有果子,每经过1s果子都会向下一节点掉落,若有两个果子同时掉到同一个节点,则两个果子都消失。每1s我们都可以从节点1收集1个果子,1是树根,现给出2-n节点指向的节点,求可收集多少果子。
抽象化,求出每个节点距离1(树根)的距离。例如距离为2的节点的果子将在第2s掉落到节点1,先求出距离为i的节点的果子数量cnt【i】,ans=cnt[i]%2
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int maxn=100005;
int n;
int from[maxn];
int dp[maxn];
int cnt[maxn];
int main(){
cin >> n;
for (int i=2;i<=n;i++){
cin >> from[i];
}
dp[1]=1;
for (int i=2;i<=n;i++){
dp[i]=dp[from[i]]+1;
}
for (int i=1;i<=n;i++){
cnt[dp[i]]++;
}
int ans=0;
for (int i=1;i<=n;i++){
ans+=cnt[i]%2;
}
cout << ans << endl;
}