Codeforces Round #468 Div. 2 D. Peculiar apple-tree

题目

http://codeforces.com/problemset/problem/931/D

题意

给你一棵树,有n个节点,每个节点有一个苹果,在苹果成熟后,苹果会落下来,如果有两个苹果落到了同一个节点,那么这两个苹果会消失,问最后会有多少个苹果落到根节点。

题解

统计每个苹果落下来需要多少步,然后排序。sum统计相同步骤的个数,然后ans += sum%2

AC代码

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<vector>
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int a[100005];
int apple[100005];
int tong[100005];
int main()
{
	mem(a,0);
	mem(tong,0);
	int n;
	scanf("%d",&n);
	for(int i=2;i<=n;i++)
	{
		scanf("%d",&a[i]);
		apple[i] = a[i];
	}
	sort(a+2,a+n+1);
	while(a[2] != 0)
	{
		a[2] = apple[a[2]];
		tong[2]++;
	}
	for(int i=3;i<=n;i++)
	{
		if(apple[i] == apple[i-1])
			tong[i] = tong[i-1];
		else
			tong[i] = tong[apple[i]]+1;
	}
	sort(tong+2,tong+n+1);
	int sum = 1,ans = 1;
	for(int i=3;i<=n;i++)
	{
		if(tong[i] == tong[i-1])
		{
			sum++;
		}
		else
		{
			ans += sum%2;
			sum = 1;
		}
	}
	ans += sum%2;
	printf("%d\n",ans);	
	return 0;
}
发布了51 篇原创文章 · 获赞 16 · 访问量 3366

猜你喜欢

转载自blog.csdn.net/weixin_43911945/article/details/101107727