Submission #1212850

#TimeUsernameProblemLanguageResultExecution timeMemory
1212850vyaductPower Plant (JOI20_power)C++20
0 / 100
2 ms4936 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() const int mxN = 200'005; vector<int> adj[mxN]; ll dp[mxN][2][2]; bool power[mxN]; // dp[n][on/off][there is/isn't a turned on child outside of his subtree] void dfs(int s, int e) { ll mx1=0; ll mx2=0; ll sum=0; for (int u: adj[s]){ if (u == e) continue; dfs(u, s); sum += max(dp[u][0][1], dp[u][1][1]); mx1 = max(dp[u][0][0], dp[u][1][0]); mx2 = max(dp[u][0][1], dp[u][1][1]); } dp[s][0][0] = max(sum-power[s], mx1); dp[s][0][1] = sum-power[s]; dp[s][1][0] = mx2+power[s]; dp[s][1][1] = power[s]; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for (int i = 0; i < n-1; i++) { int u, v; cin >> u >> v; adj[u].pb(v), adj[v].pb(u); } string s; cin>>s; for (int i=0;i<n;i++) power[i+1]=s[i]=='1'; dfs(1, 0); cout << max( {dp[1][0][0], dp[1][0][1], dp[1][1][0], dp[1][1][1]} ) << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...