Submission #849773

#TimeUsernameProblemLanguageResultExecution timeMemory
849773AbitoPower Plant (JOI20_power)C++17
100 / 100
183 ms26704 KiB
#include <bits/stdc++.h> #define F first #define S second #define pb push_back #define ppb pop_back #define ep insert #define endl '\n' #define elif else if #define pow pwr #define sqrt sqrtt #define int long long #define y1 YONE typedef unsigned long long ull; using namespace std; const int N=2e5+5; int n,dp[N],ans; vector<int> adj[N]; bool a[N]; int rec(int node,int p){ //int s=bool(p); dp[node]=0; for (auto u:adj[node]) if (u!=p) dp[node]+=rec(u,node); if (adj[node].size()<=1) dp[node]+=a[node]; else dp[node]-=a[node]; return dp[node]=max(dp[node],(int)a[node]); } void dfs(int node,int p){ if (p) dp[p]=max(dp[p]-dp[node],(int)a[p]); dp[node]=max(dp[node]+dp[p],(int)a[node]); ans=max(ans,dp[node]); for (auto u:adj[node]) if (u!=p) dfs(u,node); return; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin>>n; for (int i=1;i<n;i++){ int x,y;cin>>x>>y; adj[x].pb(y);adj[y].pb(x); }for (int i=1;i<=n;i++){char c;cin>>c;a[i]=c-'0';} rec(1,0); dfs(1,0); cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...