Submission #1283384

#TimeUsernameProblemLanguageResultExecution timeMemory
1283384am_aadvikPower Plant (JOI20_power)C++20
100 / 100
182 ms44684 KiB
#include <iostream> #include <vector> #include <cstring> using namespace std; vector<int> g[2000005], p; int dp[2000005][2]; int dfs(int node, int b, int par) { if (dp[node][b] != -1) return dp[node][b]; int mc1 = 0, mc0 = 0, sc1 = 0; for (auto x : g[node]) if (x != par) { mc1 = max(mc1, dfs(x, 1, node)); sc1 += dfs(x, 1, node); mc0 = max(mc0, dfs(x, 0, node)); } int c1 = ((b == 0) ? mc1 : 0) + p[node]; int c2 = ((b == 0) ? mc0 : 0); int c3 = ((b == 0) ? max(sc1, mc0) : sc1) - p[node]; return dp[node][b] = max(c1, max(c2, c3)); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; p.assign(n + 1, 0); for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } string s; cin >> s; for (int i = 1; i <= n; ++i) p[i] = (s[i - 1] - '0'); memset(dp, -1, sizeof(dp)); cout << dfs(1, 0, 0) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...