今天当畜生了,只能说是分不了了,难绷,这下🃏了
CF 1676G
今天开始刷树形DP
第一道是道水水题,dfs一下,遍历黑子和白子的数量就好了
黑子说话!
void solve(){
int n;
cin>>n;
vector<int>f(n+1);
vector<vector<int>>E(n+1);
for(int i=2;i<=n;++i){
cin>>f[i];
if(f[i]!=i){
E[f[i]].push_back(i);
}
}
string color;
cin>>color;
color='0'+color;
vector<int>white(n+1),black(n+1);
function<void(int,int)>dfs=[&](int x,int fa){
if(color[x]=='W'){
white[x]++;
}else{
black[x]++;
}
for(auto v:E[x]){
if(v!=fa){
dfs(v,fa);
white[x]+=white[v];
black[x]+=black[v];
}
}
};
dfs(1,-1);
int ans=0;
for(int i=1;i<=n;++i){
if(white[i]==black[i]){
++ans;
}
}
cout<<ans<<'\n';
return;
}