Submission #1218150

#TimeUsernameProblemLanguageResultExecution timeMemory
1218150sophiaeternaliaThe Xana coup (BOI21_xanadu)C++20
0 / 100
33 ms18500 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<vector<int>> g; vector<int> a; vector<array<int, 4>> dp; void dfs(int v, int la){ if (g[v].size()<2 and la!=-1){ if (a[v]==0){ dp[v]={1, (int)1e9, (int)1e9, 0}; } else { dp[v]={(int)1e9, 0, 1, (int)1e9}; } return; } array<int, 4> ar={0, 0, 0, 0}; for (auto u: g[v]){ if (u!=la){ dfs(u, v); if (ar[0]==1e9 or dp[u][0]==1e9){ ar[0]=1e9; } else { ar[0]+=dp[u][0]; } if (ar[1]==1e9 or dp[u][1]==1e9){ ar[1]=1e9; } else { ar[1]+=dp[u][1]; } if (ar[2]==1e9 or dp[u][2]==1e9){ ar[2]=1e9; } else { ar[2]+=dp[u][2]; } if (ar[3]==1e9 or dp[u][3]==1e9){ ar[3]=1e9; } else { ar[3]+=dp[u][3]; } } } if (ar[0]!=1e9){ ar[0]++; } if (ar[1]!=1e9){ ar[1]++; } if (ar[2]!=1e9){ ar[2]++; } if (ar[3]!=1e9){ ar[3]++; } if (a[v]==1){ dp[v]={ar[0], ar[3], ar[1], ar[2]}; } else { dp[v]={ar[1], ar[2], ar[0], ar[3]}; } return; } int main(){ cin.tie(0); ios::sync_with_stdio(NULL); int n; cin>>n; g.resize(n); a.resize(n); dp.resize(n); for (int i=0; i<n-1; i++){ int a, b; cin>>a>>b; a--; b--; g[a].push_back(b); g[b].push_back(a); } for (int i=0; i<n; i++){ cin>>a[i]; } dfs(0, -1); if (dp[0][2]==1e9 and dp[0][3]==1e9){ cout<<"impossible"<<"\n"; } else { cout<<min(dp[0][2], dp[0][3])<<"\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...