提交时间:2024-10-23 09:04:24
运行 ID: 33824
//100 #include<bits/stdc++.h> #define PII pair<int,int> #define fi first #define se second #define mk make_pair #define ll long long using namespace std; const int N=2e5+10,INF=1e9; int dep[N],f[N],g[N],h[N],h1[N],h2[N],sm[N]; vector<int> E[N];int n; string s; void megM(int &a,int &b,int c){ if(c>=a){ b=a;a=c; }else if(c>=b){ b=c; } }void megm(int &a,int &b,int c){ if(c<=a){ b=a;a=c; }else if(c<=b){ b=c; } } void dfs(int u,int fa){ f[u]=0;g[u]=0;h[u]=INF;h1[u]=0,h2[u]=0; for(auto v:E[u]){ if(v==fa) continue; dep[v]=dep[u]+1;dfs(v,u); megM(f[u],g[u],f[v]+1); megM(h1[u],h2[u],h1[v]+1); if(sm[v]>0) h[u]=min(h[u],h1[v]+1); sm[u]+=sm[v]; //if(sm[v]>0) megm(h1[u],h2[u],h[v]+1); }if(s[u]=='1') /*megm(h1[u],h2[u],0),*/sm[u]++; //if(h1[u]==INF) megm(h1[u],h2[u],0); }void dfs2(int u,int fa){ int a=INF,b=INF; for(auto v:E[u]){ if(v==fa) continue; //int vh=h1[u];if(h1[u]==h[v]+1&&sm[v]>0) vh=h2[u]; int vh=INF;vh=h1[u];if(h1[v]+1==h1[u]) vh=h2[u]; //cout<<sm[1]<<' '<<sm[v]<<' '<<vh<<endl; if(sm[1]-sm[v]>0) h[v]=min(h[v],vh+1); megM(h1[v],h2[v],vh+1); int vf=f[u];if(f[u]==f[v]+1) vf=g[u]; megM(f[v],g[v],vf+1); dfs2(v,u); } } int main(){ cin>>n; for(int i=1;i<n;i++){ int u,v;cin>>u>>v; E[u].push_back(v);E[v].push_back(u); }cin>>s;s=' '+s; dfs(1,0);dfs2(1,0); ll ans=1; for(int i=1;i<=n;i++){ if(s[i]=='1') ans+=min(g[i]+1,f[i]-1)+1; else ans+=max((min(f[i]-1,g[i]+1)-h[i]+1),0); //cout<<f[i]<<' '<<g[i]<<' '<<h[i]<<' '<<ans<<endl; }cout<<ans; return 0; }