#include #include #include using namespace std; int ans = 0, num=0; vector c; vector visit; int dfs(vector> &E, int from, int p){ visit[from] = 1; num++; int cnt=0; for(auto to : E[from]){ if (p == to) continue; assert(!visit[to]); cnt += dfs(E, to, from); } if ((cnt + c[from]) % 2 == 0){ ans++; return 1; } else return 0; } int main(){ int N, a, b; cin >> N; assert(1<=N && N<=2e5); vector> E(N); c.resize(N); visit.resize(N, 0); for (int i=0; i> a >> b; a--; b--; E[a].push_back(b); E[b].push_back(a); assert(a < b && 0 <= a && a <= N-1 && 0 <= b && b <= N-1); } for (int i=0; i> c[i]; assert(c[i] == 0 || c[i] == 1); } if (dfs(E, 0, -1) == 1) cout << -1 << endl; else cout << ans << endl; assert(num == N); return 0; }