Submission #404667

#TimeUsernameProblemLanguageResultExecution timeMemory
404667nicolaalexandraThe Xana coup (BOI21_xanadu)C++14
100 / 100
166 ms17664 KiB
#include <bits/stdc++.h> #define DIM 200010 #define INF 10000000 using namespace std; int dp[DIM][2][2],v[DIM],aux[2][2]; vector <int> L[DIM]; int n,i,x,y; void dfs (int nod, int tata){ int ok = 0; for (auto vecin : L[nod]) if (vecin != tata){ ok = 1; dfs (vecin,nod); } if (!ok){ dp[nod][v[nod]][0] = 0; dp[nod][1-v[nod]][1] = 1; } else { /// caz 1: nu dau switch in nod dp[nod][v[nod]][0] = 0; dp[nod][1-v[nod]][1] = 1; for (auto vecin : L[nod]){ if (vecin == tata) continue; for (int i=0;i<2;i++) for (int j=0;j<2;j++) aux[i][j] = INF; aux[0][0] = min (dp[nod][0][0] + dp[vecin][0][0], dp[nod][1][0] + dp[vecin][0][1]); aux[0][1] = min (dp[nod][0][1] + dp[vecin][1][0], dp[nod][1][1] + dp[vecin][1][1]); aux[1][0] = min (dp[nod][1][0] + dp[vecin][0][0], dp[nod][0][0] + dp[vecin][0][1]); aux[1][1] = min (dp[nod][1][1] + dp[vecin][1][0], dp[nod][0][1] + dp[vecin][1][1]); for (int i=0;i<2;i++) for (int j=0;j<2;j++) dp[nod][i][j] = min(INF,aux[i][j]); } } } int main (){ //ifstream cin ("date.in"); //ofstream cout ("date.out"); cin>>n; for (i=1;i<n;i++){ cin>>x>>y; L[x].push_back(y); L[y].push_back(x); } for (i=1;i<=n;i++){ cin>>v[i]; dp[i][0][0] = dp[i][0][1] = dp[i][1][0] = dp[i][1][1] = INF; } dfs (1,0); int sol = min(dp[1][0][0],dp[1][0][1]); if (sol == INF) cout<<"impossible"; else cout<<sol; 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...