Submission #1295861

#TimeUsernameProblemLanguageResultExecution timeMemory
1295861Jawad_Akbar_JJThe Xana coup (BOI21_xanadu)C++20
100 / 100
57 ms15700 KiB
#include <iostream> #include <vector> using namespace std; const int N = 1<<18; vector<int> nei[N]; int dp[N][4], stt[N]; void dfs(int u, int p){ dp[u][1] = dp[u][3] = N; for (int i : nei[u]){ if (i == p) continue; dfs(i, u); int a[] = {dp[u][0], dp[u][1], dp[u][2], dp[u][3]}; dp[u][0] = min(a[0] + dp[i][0], a[1] + dp[i][1]); dp[u][1] = min(a[1] + dp[i][0], a[0] + dp[i][1]); dp[u][2] = min(a[2] + dp[i][2], a[3] + dp[i][3]); dp[u][3] = min(a[3] + dp[i][2], a[2] + dp[i][3]); } int a[] = {dp[u][0], dp[u][1], dp[u][2], dp[u][3]}; // cout<<u<<" ::\n"; // cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl; if (stt[u]){ dp[u][0] = a[0|1]; dp[u][1] = a[2|0] + 1; dp[u][2] = a[0|0]; dp[u][3] = a[2|1] + 1; } else{ dp[u][0] = a[0|0]; dp[u][1] = a[2|1] + 1; dp[u][2] = a[0|1]; dp[u][3] = a[2|0] + 1; } // cout<<dp[u][0]<<" "<<dp[u][1]<<" "<<dp[u][2]<<" "<<dp[u][3]<<endl; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin>>n; for (int i=1, a, b;i<n;i++){ cin>>a>>b; nei[a].push_back(b); nei[b].push_back(a); } for (int i=1;i<=n;i++) cin>>stt[i]; dfs(1, 1); int Ans = min(dp[1][0], dp[1][1]); if (Ans >= N) cout<<"impossible\n"; else cout<<Ans<<'\n'; }
#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...