제출 #1274807

#제출 시각아이디문제언어결과실행 시간메모리
1274807SnowRaven52Power Plant (JOI20_power)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h> using namespace std; int main() { // freopen("main.in", "r", stdin); // freopen(".out", "w", stdout); ios::sync_with_stdio(false); cin.tie(nullptr); 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; s = " " + s; vector<long long> dp(n + 1, 0); vector<int> par(n + 1, 0); vector<int> ord; queue<int> q; q.push(1); par[1] = -1; while (!q.empty()) { int u = q.front(); q.pop(); ord.push_back(u); for (int v : g[u]) if (v != par[u]) { par[v] = u; q.push(v); } } for (int k = n - 1; k >= 0; k--) { int u = ord[k]; long long sum = 0, best = LLONG_MIN; for (int v : g[u]) if (v != par[u]) { sum += dp[v]; if (dp[v] > best) best = dp[v]; } if (s[u] == '1') { long long a = (best == LLONG_MIN ? 1 : best + 1); long long b = sum - 1; dp[u] = max(a, b); } else { dp[u] = sum; } } cout << dp[1] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...