#include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; int n,ans; char c[maxn]; int head[maxn],tot; int f[maxn],dep[maxn],size[maxn],son[maxn]; struct edge { int next,to; }e[maxn<<1]; inline void add(int from,int to) { e[++tot].next=head[from]; e[tot].to=to; head[from]=tot; } void dfs1(int now,int fa) { dep[now]=dep[fa]+1; f[now]=fa; size[now]=1; for(int i=head[now];i;i=e[i].next) { int to=e[i].to; if(to==fa) continue; dfs1(to,now); size[now]+=size[to]; if(size[to]>size[son[now]]) son[now]=to; } } void dfs2(int now,int fa) { if(c[now]=='R') size[now]=1; else size[now]=0; for(int i=head[now];i;i=e[i].next) { int to=e[i].to; if(to==fa) continue; dfs2(to,now); size[now]+=size[to]; } if(size[now]==dep[now]-dep[fa]&&c[now]=='R') ans++; } int main() { ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++) cin>>c[i]; for(int i=1;i<n;i++) { int x,y; cin>>x>>y; add(x,y); add(y,x); } dfs1(1,0); dfs2(1,0); for(int i=1;i<=n;i++) if(c[i]=='R'&&son[i]) ans++; cout<<ans<<endl; return 0; }


原文地址: https://www.cveoy.top/t/topic/buGr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录