#include<bits/stdc++.h>
using namespace std;
#define int long long
int32_t main(){
int n;
cin >> n;
vector<vector<int>> adj(n);
for(int i = 0; i < n-1; i++){
int a,b;
cin >> a >> b;
a--;b--;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<bool> ostate(n);
for(int i = 0; i < n; i++){
int a;
cin >> a;
ostate[i] = a;
}
int p2 = 1 << n;
int b = 1e9;
for(int m = 0; m < p2; m++){
vector<bool> state = ostate;
for(int i = 0;i < n; i++){
if(m & (1 << i)){
state[i] = !state[i];
for(auto u : adj[i]){
state[u] = !state[u];
}
}
}
bool valid = true;
for(int i = 0; i < n; i++){
if(state[i]){
valid = false;
break;
}
}
if(valid){
b = min(b, (long long)__builtin_popcount(m));
}
}
if(b == 1e9){
cout << "impossible\n";
}else{
cout << b << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |