Submission #359738

#TimeUsernameProblemLanguageResultExecution timeMemory
359738kuzmaPower Plant (JOI20_power)C++17
0 / 100
3 ms2668 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> typedef long long ll; typedef long double ld; #define int ll #define f first #define s second #define pb push_back #define vi vector<int> #define pii pair<int, int> using namespace std; const int maxn = 1e5 + 50; vi r[maxn]; int ans = 0; int dp[maxn]; string s; void dfs(int v, int p = -1) { dp[v] = -(s[v] - '0'); for (auto &u : r[v]) { if (u != p) { dfs(u, v); dp[v] += max(int(s[u] - '0'), dp[u]); } } } void dfs2(int v, int p = -1) { ans = max(ans, int(s[v] - '0')); ans = max(ans, dp[v]); for (auto &u : r[v]) ans = max(ans, dp[u] + (s[v] - '0')); for (auto &u : r[v]) { if (u != p) { dp[v] -= max(int(s[u] - '0'), dp[u]); dp[u] += max(int(s[v] - '0'), dp[v]); dfs2(u, v); dp[u] -= max(int(s[v] - '0'), dp[v]); dp[v] += max(int(s[u] - '0'), dp[u]); } } } void solve() { int n; cin >> n; for (int i = 0; i < n - 1; ++i) { int a, b; cin >> a >> b; a--; b--; r[a].pb(b); r[b].pb(a); } cin >> s; dfs(0); dfs2(0); cout << ans << '\n'; } signed main() { // freopen("kthsubstr.in", "r", stdin); ios_base::sync_with_stdio(0); cin.tie(0); cout.precision(10); int t; t = 1; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...