Submission #1317782

#TimeUsernameProblemLanguageResultExecution timeMemory
1317782guardianecThe Xana coup (BOI21_xanadu)C++20
100 / 100
48 ms19068 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; ll n; vector<vector<ll>> adj; vector<ll> a; ll dp[100007][2][2]; void dfs(ll u, ll p) { for (int i=0; i<2; i++){ for (int j=0; j<2; j++){ dp[u][i][j] = INT_MAX; } } ll k1 = 0; ll k2 = INT_MAX; ll t1 = 1; ll t2 = INT_MAX; for (auto v : adj[u]) { if (v==p) continue; dfs(v,u); ll nk1 = min(k1 + dp[v][0][0], k2 + dp[v][1][0]); ll nk2 = min(k2 + dp[v][0][0], k1 + dp[v][1][0]); k1 = min((ll)INT_MAX, nk1); k2 = min((ll)INT_MAX, nk2); ll nt1 = min(t1 + dp[v][0][1], t2 + dp[v][1][1]); ll nt2 = min(t2 + dp[v][0][1], t1 + dp[v][1][1]); t1 = min((ll)INT_MAX, nt1); t2 = min((ll)INT_MAX, nt2); } dp[u][0][a[u]] = k1; dp[u][0][1-a[u]] = k2; dp[u][1][1-a[u]] = t1; dp[u][1][a[u]] = t2; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; adj.resize(n+1); a.resize(n+1); for (int i=0; i<n-1; i++){ ll u,v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int i=1; i<=n; i++){ cin >> a[i]; } dfs(1,0); ll res = min(dp[1][0][0], dp[1][1][0]); if (res>=INT_MAX) cout << "impossible"; else cout << res; }
#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...