#include <vector>
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x7fffffff
#define _ << ' ' <<
using pii = std::pair<int,int>;
using ll = long long;
using std::cin;
using std::cout;
using std::vector;
using std::map;
using std::queue;
using std::priority_queue;
using std::unordered_map;
using std::string;
constexpr int maxn = 1e5+10;
template<typename T>
inline void debug(T& a){cout << a <<' ';}
inline void debug(char a) {cout << a << ' ';}
inline void debug(std::vector<int>& v) {for(int& i:v) {cout << i <<' ';} cout << endl;}
vector<int> nums;
vector<vector<int> > v;
void dfs(int k) {
for(int i:v[k]) {
if(v[i].empty()) {
nums[k] += nums[i];
} else {
dfs(i);
nums[k] += nums[i];
}
}
return;
}
void solve() {
int n;cin >> n;
if(n%2) return void(cout << -1 << endl);
v.resize(n+1);
nums.resize(n+1,1);
int u,d;
vector<pii> vi(n-1);
for(int i = 1;i<=n-1;i++) {
cin >> u >> d;
v[u].emplace_back(d);
}
dfs(1);
int ans = 0;
for(int i = 1;i<=n;i++) {
if(nums[i] % 2 == 0) ans++;
}
cout << ans-1 << endl;
}
int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
int t = 1;
while(t--) {
solve();
}
return 0;
}
今天的题目很简单,本质上是统计偶数个数的联通块的个数

京公网安备 11010502036488号