#include <iostream>
#include <vector>
#include <bitset>
#include <set>
using namespace std;
using ll = long long;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
int n,a,b;
cin >> n;
vector<vector<int>> drzewo(n+1);
vector<int> dp(n+1,0);
for(int i=0;i<n-1;i++){
cin >> a >> b;
drzewo[a].push_back(b);
drzewo[b].push_back(a);
dp[a-1] |= (1<<(b-1));
dp[b-1] |= (1<<(a-1));
}
int mask = 0;
for(int i=0;i<n;i++){
cin >> a;
mask |= ((1&a)<<i);
dp[i] |= (1<<i);
}
int maskTemp = mask;
if(mask == 0){
cout << 0;
return 0;
}
set<int> zbior;
for(int i=0;i<(1<<n);i++){
maskTemp = mask;
int licznik = 0;
for(int j=0;j<n;j++){
if((i>>j)&1){
licznik++;
maskTemp ^= dp[j];
}
}
if(maskTemp==0){
zbior.insert(licznik);
}
}
if(zbior.size()>0){
for(int x : zbior){
cout << x;
return 0;
}
} else {
cout << "impossible";
}
return 0;
}
| # | 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... |