Submission #440107

#TimeUsernameProblemLanguageResultExecution timeMemory
440107Sohsoh84Power Plant (JOI20_power)C++14
100 / 100
247 ms50752 KiB
// ¯\_(ツ)_/¯ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 1e6 + 10; const ll INF = 1e9; const ll MOD = 1e9 + 7; // 998244353; // 1e9 + 9; int n, dp[MAXN], ans = 0; bool B[MAXN]; vector<int> adj[MAXN]; void dfs(int v, int p) { if (!B[v]) { dp[v] = 0; for (int u : adj[v]) { if (u == p) continue; dfs(u, v); dp[v] += dp[u]; } ans = max(ans, dp[v]); return; } int mx = 0; dp[v] = -1; for (int u : adj[v]) { if (u == p) continue; dfs(u, v); dp[v] += dp[u]; mx = max(mx, dp[u]); } dp[v] = max(dp[v], 1); ans = max({ans, mx + 1, dp[v]}); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; fill(dp, dp + MAXN, -INF); for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int i = 1; i <= n; i++) { char c; cin >> c; B[i] = (c == '1'); } 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...