Submission #1305222

#TimeUsernameProblemLanguageResultExecution timeMemory
1305222neonglitchPower Plant (JOI20_power)C++20
100 / 100
99 ms29348 KiB
#include <iostream> #include <vector> using namespace std; const int N=2e5+10; vector<int> ma[N]; int sp[N],dp[N][2],ans=0; void dfs(int x,int p=0) { dp[x][0]=-sp[x]; dp[x][1]=sp[x]; for(auto y:ma[x]) if(y^p) dfs(y,x),dp[x][0]+=max(dp[y][0],dp[y][1]); } void update(int x) { int sm=0; for(auto y:ma[x]) { ans=max(ans,max(dp[y][0],dp[y][1])+1); sm+=max(dp[y][0],dp[y][1]); } sm--; ans=max(ans,sm); } void reroot(int x,int y) { dp[x][0]-=max(dp[y][0],dp[y][1]); dp[y][0]+=max(dp[x][0],dp[x][1]); } void dfs_(int x,int p=0) { if(sp[x]) update(x); for(auto y:ma[x]) if(y^p) { reroot(x,y); dfs_(y,x); reroot(y,x); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<n;i++) { int x,y; cin>>x>>y; ma[x].push_back(y); ma[y].push_back(x); } for(int i=1;i<=n;i++) { char c; cin>>c; sp[i]=c-'0'; } ans=1; for(int i=1;i<=n;i++) { if(sp[i]) { dfs(i); dfs_(i); break; } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...