Submission #1244489

#TimeUsernameProblemLanguageResultExecution timeMemory
1244489inkvizytorPower Plant (JOI20_power)C++20
100 / 100
230 ms40072 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int sc = 0; void dfs (int v, vector<vector<int>> &g, vector<bool> &odw, vector<int> &dp, vector<bool> &c) { odw[v] = 1; vector<int> x; int s = 0; for (int u : g[v]) { if (!odw[u]) { dfs(u, g, odw, dp, c); x.push_back(dp[u]); s += dp[u]; } } if (!c[v]) { dp[v] = s; } else { if (x.empty()) { dp[v] = 1; sc = max(sc, 1); return; } sort(x.begin(), x.end(), greater<int>()); sc = max(sc, x[0]+1); dp[v] = max(1, s-1); } sc = max(sc, dp[v]); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<vector<int>> g (n+1); for (int i = 0; i < n-1; i++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } string s; cin >> s; vector<bool> c (n+1, 0); for (int i = 0; i < n; i++) { c[i+1] = (s[i]=='1'); } vector<bool> odw (n+1, 0); vector<int> dp (n+1, 0); dfs(1, g, odw, dp, c); cout << sc << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...