#include <bits/stdc++.h>
using namespace std;

int N;
vector<vector<int>> adj;

vector<int> order;
vector<vector<int>> children;

void dfs(int x, int p = -1) {
    order.push_back(x);
    for (auto &&c : adj[x]) {
        if (c == p) continue;
        dfs(c, x);
        children[x].push_back(c);
    }
}

int main() {
    cin >> N;
    adj.resize(N);
    children.resize(N);

    for (int i = 0; i < N - 1; i++) {
        int u, v;
        cin >> u >> v;
        u--;
        v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    dfs(0);

    vector<pair<int, int>> dp(N, {0, 1});

    reverse(order.begin(), order.end());
    for (auto &&i : order) {
        for (auto &&j : children[i]) {
            dp[i] = {
                dp[i].first + max(dp[j].first, dp[j].second),
                dp[i].second + dp[j].first,
            };
        }
    }

    reverse(order.begin(), order.end());
    for (auto &&i : order) {
        for (auto &&j : children[i]) {
            pair<int, int> dp_par = {
                dp[i].first - max(dp[j].first, dp[j].second),
                dp[i].second - dp[j].first,
            };
            dp[j] = {
                dp[j].first + max(dp_par.first, dp_par.second),
                dp[j].second + dp_par.first,
            };
        }
    }

    int ans = numeric_limits<int>::max();
    for (auto &&[x, y] : dp) {
        ans = min(ans, y);
    }
    cout << ans << endl;
}