题目链接
染色の树-美团2023笔试(codefun2000)
题目内容
输入描述
输出描述
输出一行一个整数表示根节点的值。
样例1
输入
3
1 1
2 2 2
输出
0
题解1
#include<bits/stdc++.h>
using namespace std;
const int N = 50005;
int n, c[N];
vector<int> edge[N];
int dfs(int u){
if(edge[u].size() == 0) return 1; // 没有儿子节点
int sum = 0;
for(int i = 0; i < edge[u].size(); i++){
int v = edge[u][i];
if(edge[u].size() == 2){
if(c[u] == 1) sum += dfs(v); // 父节点的颜色为红色
else sum = sum ^ dfs(v); // 父节点的颜色为绿色
}else if(edge[u].size() == 1) sum = dfs(v);
}
return sum;
}
int main(){
scanf("%d", &n);
for(int i = 2, u; i <= n; i++){
scanf("%d", &u);
edge[u].push_back(i);
}
for(int i = 1; i <= n; i++) scanf("%d", &c[i]);
printf("%d\n", dfs(1));
return 0;
}