#include using namespace std; using pii = pair; using ll = long long; const int N = 2000010, MOD = 998244353, INF = 0x3f3f3f3f; int n, m, w[N]; int e[N], ne[N], h[N], idx; void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; } int f[N][2]; void dfs(int r, int fa) { int c = 0, sum = 0; priority_queue, greater > q; for (int i = h[r]; ~i; i = ne[i]) { int j = e[i]; ++c; if (j == fa) continue; dfs(j, r); sum += min(f[j][0], f[j][1]); q.push(max(0, f[j][0] - f[j][1])); } int t = (c + 2) >> 1, g = 0; f[r][1] = f[r][0] = sum + 1; while (g < t - 1) { sum += q.top(); q.pop(); g++; } f[r][1] = min(f[r][1], sum); while (q.size() && g < t) { sum += q.top(); q.pop(); g++; } if (g == t) f[r][0] = min(f[r][0], sum); } void solve() { scanf("%d", &n); memset(h, -1, sizeof(int) * (n + 10)); for (int i = 1, a, b; i < n; i++) { scanf("%d%d", &a, &b); add(a, b), add(b, a); } dfs(1, -1); printf("%d\n", f[1][0]); } int main() { int T = 1; // scanf("%d", &T); while (T--) solve(); return 0; }