1. 程式人生 > >CodeForces - 930A Peculiar apple-tree(dfs搜索)

CodeForces - 930A Peculiar apple-tree(dfs搜索)

ems dfs搜索 size ani apple ons stream push 下一個

題目:

給出一個樹,這棵樹上每個結點每一秒都會結出一顆果實,果實每經過一秒就會落向下一個結點,如果一個結點在同一時刻上的果實兩兩抵消,問最後在根節點處一共有多少個果實。

思路:

dfs直接搜索統計這棵樹的每一層上有多少個果實就可以了。如果是奇數個ans++,偶數個不作處理。

代碼:

#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#include 
<queue> #include <iomanip> #define MAX 1000000000 #define inf 0x3f3f3f3f #define FRE() freopen("in.txt","r",stdin) using namespace std; typedef long long ll; const int maxn = 100005; int n,x,ans=0; int deep[maxn]; vector<int> mp[maxn]; void init() { memset(deep,0,sizeof(deep));
for(int i=0; i<maxn; i++) { mp[i].clear(); } } void dfs(int cur,int level) { deep[level]++; for(int i=0; i<mp[cur].size(); i++) { dfs(mp[cur][i],level+1); } return; } int main() { init(); scanf("%d",&n); for(int i=2
; i<=n; i++) { scanf("%d",&x); mp[x].push_back(i); } dfs(1,1); int ans = 0; for(int i=1; i<=n; i++) { if(deep[i]%2) ans++; } printf("%d\n",ans); return 0; }

CodeForces - 930A Peculiar apple-tree(dfs搜索)