Submission #1263541

#TimeUsernameProblemLanguageResultExecution timeMemory
1263541NikoBaoticPower Plant (JOI20_power)C++20
6 / 100
19 ms328 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair<ll, ll> pii; #define all(x) x.begin(), x.end() #define sz(x) ((int) ((x).size())) #define pb push_back #define F first #define S second #define FIO ios_base::sync_with_stdio(false); cin.tie(0) const int N = 20; int n; vector<int> adj[N]; string s; int par[N]; bool on[N]; int calc; int cn[N]; int cnt(int node) { int sum = 0; if (on[node]) sum++; for (int x : adj[node]) { if (x == par[node]) continue; par[x] = node; sum += cnt(x); } cn[node] = sum; return sum; } int dfs(int node, bool o) { int has = 0; bool no = o; int t = 0; for (int x : adj[node]) { if (x == par[node]) continue; t += min(1, cn[x]); } if (t >= 2 or on[node]) no = 1; for (int x : adj[node]) { if (x == par[node]) continue; has += min(1, dfs(x, no)); } if (o) has++; if (on[node] and has <= 1) { calc++; } else if (has >= 2 and s[node - 1] == '1') { calc--; } if (o) has--; return min(has + on[node], 1); } int main() { FIO; cin >> n; for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); } cin >> s; int ans = 0; for (int i = 0; i < (1 << n); i++) { calc = 0; for (int j = 0; j < n; j++) { if (((1 << j) & i) and s[j] == '1') { on[j + 1] = 1; } else { on[j + 1] = 0; } } cnt(1); dfs(1, 0); ans = max(ans, calc); } cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...