Submission #651699

#TimeUsernameProblemLanguageResultExecution timeMemory
651699tvladm2009The Xana coup (BOI21_xanadu)C++14
100 / 100
87 ms20476 KiB
#include <bits/stdc++.h> ///#pragma GCC target ("sse4.2") ///#pragma GCC optimize("O1") ///#pragma GCC optimize("O2") ///#pragma GCC optimize("O3") ///#pragma GCC optimize("Os") ///#pragma GCC optimize("Ofast") ///#pragma GCC target("avx,avx2,fma") ///#pragma GCC optimization ("unroll-loops") ///#pragma GCC target("avx2") using namespace std; typedef long long ll; #define int ll const int N = 1e5 + 7; const int INF = 1e9; int a[N], dp[N][2][2]; vector<int> g[N]; void dfs(int u, int p = -1) { int sum[2][2]; sum[0][0] = sum[0][1] = 0; sum[1][0] = sum[1][1] = INF; for (auto &it : g[u]) { if (it != p) { dfs(it, u); int old[2][2]; old[0][0] = sum[0][0]; old[1][0] = sum[1][0]; old[0][1] = sum[0][1]; old[1][1] = sum[1][1]; sum[0][0] = min({old[0][0] + dp[it][0][0], old[1][0] + dp[it][1][0], INF}); sum[0][1] = min({old[0][1] + dp[it][0][1], old[1][1] + dp[it][1][1], INF}); sum[1][0] = min({old[0][0] + dp[it][1][0], old[1][0] + dp[it][0][0], INF}); sum[1][1] = min({old[0][1] + dp[it][1][1], old[1][1] + dp[it][0][1], INF}); } } if (a[u] == 1) { dp[u][0][0] = sum[1][0]; dp[u][0][1] = sum[0][0]; dp[u][1][0] = sum[0][1] + 1; dp[u][1][1] = sum[1][1] + 1; } else { dp[u][0][0] = sum[0][0]; dp[u][0][1] = sum[1][0]; dp[u][1][0] = sum[1][1] + 1; dp[u][1][1] = sum[0][1] + 1; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 1; i <= n - 1; i++) { int x, y; cin >> x >> y; g[x].push_back(y); g[y].push_back(x); } for (int i = 1; i <= n; i++) { cin >> a[i]; } dfs(1); int ans = min(dp[1][0][0], dp[1][1][0]); if (ans == INF) { cout << "impossible"; return 0; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...