제출 #1129259

#제출 시각아이디문제언어결과실행 시간메모리
1129259vladiliusPower Plant (JOI20_power)C++20
100 / 100
167 ms32140 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<int> g[n + 1]; for (int i = 1; i < n; i++){ int x, y; cin>>x>>y; g[x].pb(y); g[y].pb(x); } vector<bool> a(n + 1); for (int i = 1; i <= n; i++){ char x; cin>>x; a[i] = (x == '1'); } int dp[n + 1][2]; function<void(int, int)> dfs = [&](int v, int pr){ dp[v][0] = 0; dp[v][1] = a[v]; for (int i: g[v]){ if (i == pr) continue; dfs(i, v); dp[v][0] += max({0, dp[i][1] - 2, dp[i][0]}); dp[v][1] = max({dp[v][1], dp[i][0] + 1, dp[i][1] - 1}); } dp[v][0] = max((int) a[v], dp[v][0] - a[v]); if (!a[v]) dp[v][1] = 0; }; dfs(1, 0); int out = 0; for (int i = 1; i <= n; i++){ out = max({out, dp[i][0], dp[i][1]}); } cout<<out<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...