Submission #332632

#TimeUsernameProblemLanguageResultExecution timeMemory
332632YJUPower Plant (JOI20_power)C++14
47 / 100
1569 ms34988 KiB
#include<bits/stdc++.h> #pragma GCC optimize("unroll-loops,no-stack-protector") using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> pll; const ll MOD=1e9+7; const ll MOD2=998244353; const ll N=4e5+5; const ll K=350; const ld pi=acos(-1); const ll INF=(1LL<<60); #define SQ(i) ((i)*(i)) #define REP(i,n) for(ll i=0;i<n;i++) #define REP1(i,n) for(ll i=1;i<=n;i++) #define pb push_back #define mp make_pair #define X first #define Y second #define setp setprecision #define lwb lower_bound #define SZ(_a) (ll)_a.size() ll n,x,y,h[N],dp[N],ans,col[N],sum; vector<ll> v[N]; string s; void DFS(ll nd,ll pa){ dp[nd]=0; for(auto i:v[nd]){ if(i==pa)continue; DFS(i,nd); dp[nd]+=dp[i]; } dp[nd]=max(dp[nd]-col[nd],col[nd]); return ; } void move(ll rt,ll to){ dp[rt]=0; for(auto i:v[rt]){ if(i==to)continue; dp[rt]+=dp[i]; } dp[rt]=max(dp[rt]-col[rt],col[rt]); dp[to]=0; for(auto i:v[to]){ dp[to]+=dp[i]; } dp[to]=max(dp[to]-col[to],col[to]); } void reroot(ll nd,ll pa){ ans=max(ans,dp[nd]); for(auto i:v[nd]){ if(i==pa)continue; move(nd,i); reroot(i,nd); move(i,nd); } } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; REP(i,n-1)cin>>x>>y,v[x].pb(y),v[y].pb(x); cin>>s; REP(i,n)if(s[i]=='1')col[i+1]=1,++sum; if(sum>=2)ans=2;else ans=sum; DFS(1,0); reroot(1,0); cout<<ans<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...