层次遍历
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
int i,n,res=0;
// res是总的染色次数
cin>>n;
//father[i]的值表示i的节点的父亲节点
//color[i]的值表示节点i要染的颜色
vector<int> father(n,0),color(n,0);
queue<int> q;
for(i=1;i<n;i++) cin>>father[i];
for(i=0;i<n;i++) cin>>color[i];
res++;
q.push(1);
while(q.size()){
// 相当于层次遍历,因为要先染根节点,再染儿子节点
int node=q.front();
q.pop();
for(i=0;i<n;i++){
if(father[i]==node){
if(color[father[i]-1]!=color[i]){ //如果当前节点的父节点颜色 与当前节点要求的颜色不符,那么就要染当前节点
res++;
}
q.push(i+1);
}
}
}
cout<<res<<endl;
return 0;
}