제출 #655266

#제출 시각아이디문제언어결과실행 시간메모리
655266600MihneaThe Xana coup (BOI21_xanadu)C++17
100 / 100
83 ms23172 KiB
#include <bits/stdc++.h> using namespace std; const int N=(int)1e5+7; const int INF=(int)1e9+7; int n; int v[N]; int cost[N][2][2]; int nw[2][2]; vector<int> g[N]; void minup(int &a,int b){ a=min(a,b); } void dfs(int a,int p=-1){ vector<int> kids; for (auto &b : g[a]){ if (b==p){ continue; } kids.push_back(b); dfs(b,a); } g[a]=kids; cost[a][0][0]=cost[a][0][1]=cost[a][1][0]=cost[a][1][1]=INF; cost[a][0][v[a]]=0; cost[a][1][v[a]^1]=1; for (auto &b : g[a]){ nw[0][0]=nw[0][1]=nw[1][0]=nw[1][1]=INF; for (int apply=0;apply<=1;apply++){ for(int cur=0;cur<=1;cur++){ for (int apply_b=0;apply_b<=1;apply_b++){ for (int cur_b=0;cur_b<=1;cur_b++){ if ((cur_b^apply)==0){ minup(nw[apply][cur^apply_b],cost[a][apply][cur]+cost[b][apply_b][cur_b]); } } } } } for(int i=0;i<=1;i++){ for (int j=0;j<=1;j++){ cost[a][i][j]=nw[i][j]; } } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ///freopen("___input___.txt","r",stdin); cin>>n; for (int i=1;i<n;i++){ int a,b; cin>>a>>b; g[a].push_back(b); g[b].push_back(a); } for (int i=1;i<=n;i++){ cin>>v[i]; } dfs(1); int sol=INF; for (int x=0;x<=1;x++){ sol=min(sol,cost[1][x][0]); } if(sol==INF){ cout<<"impossible\n"; return 0; } cout<<sol<<"\n"; 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...