Submission #1197361

#TimeUsernameProblemLanguageResultExecution timeMemory
1197361Captain_GeorgiaPower Plant (JOI20_power)C++20
100 / 100
175 ms31600 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int32_t main () { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin >> N; vector<int> g[N]; for (int i = 1;i < N;i ++) { int u, v; cin >> u >> v; -- u; -- v; g[u].push_back(v); g[v].push_back(u); } string S; cin >> S; int mx = 0; vector<int> dp(N, 0); function<void(int, int)> dfs_init = [&](int si, int pi) -> void { int tmp = 0; for (auto ti : g[si]) if (ti != pi) { dfs_init(ti, si); tmp += dp[ti]; } if (g[0].size() == 1 && si == 0) { dp[si] = max(S[si] - '0', tmp + (S[si] - '0')); } else { dp[si] = max(S[si] - '0', tmp - (S[si] - '0')); } }; dfs_init(0, 0); function<void(int, int, int)> dfs = [&](int si, int pi, int val) -> void { for (auto ti : g[si]) if (ti != pi) { val += dp[ti]; } if (g[si].size() == 1) mx = max(mx, val + (S[si] - '0')); else mx = max(mx, max(S[si] - '0', val - (S[si] - '0'))); for (auto ti : g[si]) if (ti != pi) { dfs(ti, si, max(val - dp[ti] - (S[si] - '0'), S[si] - '0')); } }; dfs(0, 0, 0); cout << mx << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...