Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)D. Peculiar apple-tree

一卷旌收千骑虏,万全身出百重围。这篇文章主要讲述Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)D. Peculiar apple-tree相关的知识,希望能为你提供帮助。
D. Peculiar apple-treetime limit per test 1 secondmemory limit per test 256 megabytesinput standard inputoutput standard outputIn Arcady‘s garden there grows a peculiar apple-tree that fruits one time per year. Its peculiarity can be explained in following way: there are n inflorescences, numbered from 1 to n. Inflorescence number 1 is situated near base of tree and any other inflorescence with number i (i?> ?1) is situated at the top of branch, which bottom is pi-th inflorescence and pi?< ?i.
Once tree starts fruiting, there appears exactly one apple in each inflorescence. The same moment as apples appear, they start to roll down along branches to the very base of tree. Each second all apples, except ones in first inflorescence simultaneously roll down one branch closer to tree base, e.g. apple in a-th inflorescence gets to pa-th inflorescence. Apples that end up in first inflorescence are gathered by Arcady in exactly the same moment. Second peculiarity of this tree is that once two apples are in same inflorescence they annihilate. This happens with each pair of apples, e.g. if there are 5 apples in same inflorescence in same time, only one will not be annihilated and if there are 8 apples, all apples will be annihilated. Thus, there can be no more than one apple in each inflorescence in each moment of time.
Help Arcady with counting number of apples he will be able to collect from first inflorescence during one harvest.
InputFirst line of input contains single integer number n (2?≤?n?≤?100?000)   — number of inflorescences.
Second line of input contains sequence of n?-?1 integer numbers p2,?p3,?...,?pn (1?≤?pi?< ?i), where pi is number of inflorescence into which the apple from i-th inflorescence rolls down.
OutputSingle line of output should contain one integer number: amount of apples that Arcady will be able to collect from first inflorescence during one harvest.
ExamplesInput Copy

3
1 1

Output
1

Input Copy
5
1 2 2 2

Output
3

Input Copy
18
1 1 1 4 4 3 2 2 2 10 8 9 9 9 10 10 4

Output
4

NoteIn first example Arcady will be able to collect only one apple, initially situated in 1st inflorescence. In next second apples from 2nd and 3rd inflorescences will roll down and annihilate, and Arcady won‘t be able to collect them.
【Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)D. Peculiar apple-tree】In the second example Arcady will be able to collect 3 apples. First one is one initially situated in first inflorescence. In a second apple from 2nd inflorescence will roll down to 1st (Arcady will collect it) and apples from 3rd, 4th, 5th inflorescences will roll down to 2nd. Two of them will annihilate and one not annihilated will roll down from 2-nd inflorescence to 1st one in the next second and Arcady will collect it.
分析:
因为只有同一时间在同一地点的苹果相碰会消失,那么相碰一定只出现在同一层的苹果之间,且在该层苹果大于1的时候,一定会出现相碰。
所以我们可以将苹果分层进行讨论
如果该层的苹果数为奇数,那么无论经过怎样的过程,到最后始终会剩一个。
如果为偶数,那么到最后一定一个也不剩。
将每层得到的结果累加即可
#include < cstdio> #include < iostream> #include < algorithm> #include < vector> using namespace std; typedef long long LL; vector< int> V[100010]; int num[100010]; int maxx; void dfs(int id,int k) { num[k]++; maxx=max(k,maxx); for(int i=0; i< V[id].size(); i++) dfs(V[id][i],k+1); } int main() { int n,x,ans; cin> > n; maxx=0; ans=0; for(int i=2; i< =n; i++) { cin> > x; V[x].push_back(i); } dfs(1,1); for(int i=1; i< =maxx; i++) { if(num[i]%2==1) ans++; } cout< < ans< < endl; return 0; }

 




    推荐阅读