CodeForces - 931D Peculiar apple-tree(模拟树的结构,一定要从树根到树枝搜索,因为是从树根发叉的,树根为一个点,树枝为多个点)

In 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.

Input

First 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.

Output

Single line of output should contain one integer number: amount of apples that Arcady will be able to collect from first inflorescence during one harvest.

Example
Input
3
1 1
Output
1
Input
5
1 2 2 2
Output
3
Input
18
1 1 1 4 4 3 2 2 2 10 8 9 9 9 10 10 4
Output
4
Note

In 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.

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.


题意:一颗苹果树,先开n朵花,假设每朵花都能接一个苹果,假设都同时熟,先输入一个n,为这个树上有n个苹果,从1~n,下一行有n-1个数,为第2~n个结点上的苹果能经过一秒之后掉落的节点,只有苹果掉落到1节点上才能收;掉落的过程满足:

在掉落过程中,1、若在一个节点上同时存在偶数个苹果,则全部消失,若存在奇数个苹果,则剩下一个;2、只能掉落到规定的结点上;

思路:因为规定只有掉落到树根1号结点才能收,所以找每个层上的苹果有多少个,因为两两会抵消,所以这一层上的苹果数偶数,则这一层上的苹果,在掉落过程中一定会抵消完,若为奇数,最后落到1号结点一定就剩一个,还有就是,这一层的苹果在掉落过程中,一定不会遇到其他层的苹果,因为都在同时掉落;  这道题就是找每一层上的苹果数就行了; 一定要要从树根开始找,因为树根为一个节点,数尖为多个结点; 还有规定树根为第一层,谁能掉落到树根上的结点为第二层,以此类推;若从数尖没法规定第几层; 还有从树根搜的话,根本不用标记树的结点有没有走过(想想树的结构);从树根搜的话,要存每一个结点前驱;

代码:

#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
#define Max 100010
vector<int>v[Max];
int num[Max];
int	Ma,n;
void init()
{
	int i;
	for(i = 0; i <= n;i ++)
	{
		v[i].clear();
		num[i] = 0;
	}	
}

void dfs(int f,int step)  // 	f为树的每个结点的前驱,step第几层; 
{
	num[step] ++;
	Ma = min(step,Ma);
	for (int i = 0;i < v[f].size();i++)
		dfs(v[f][i],step + 1);
}
int main()
{
	int i,j;
	while(~scanf("%d",&n))
	{
		init();
		int k;
		for(i=2;i<=n;i++)
		{
			scanf("%d",&k);
			v[k].push_back(i);  //存每一个结点前驱; 
		}
		Ma = -1;
		dfs(1,1);
		int sum = 0;
		for(i = 1;i <= n;i++)
		{
			sum += num[i]%2;
		}
		printf("%d\n",sum);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值