#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool t = false;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = true, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return t ? -x : x;
}
struct Line {
  int v, next;
} e[200200 << 1];
int h[200200], cnt = 1;
inline void Add(int u, int v) {
  e[cnt] = (Line){v, h[u]};
  h[u] = cnt++;
}
int n, f[200200][3], dep[200200], son[200200];
void dfs(int u, int ff) {
  dep[u] = dep[ff] + 1;
  f[u][2] = 1;
  int mn = 1e6;
  for (int i = h[u]; i; i = e[i].next) {
    int v = e[i].v;
    if (v == ff) continue;
    dfs(v, u);
    son[u]++;
    f[u][2] += min(f[v][0], min(f[v][1], f[v][2]));
    f[u][1] += min(f[v][1], f[v][2]);
    mn = min(mn, f[v][2] - f[v][1]);
    f[u][0] += f[v][1];
  }
  if (son[u])
    f[u][1] += mn;
  else
    f[u][1] = 1;
  if (dep[u] <= 3) f[u][1] = min(f[u][1], f[u][0]);
  f[u][1] = min(f[u][1], f[u][2]);
}
int main() {
  n = read();
  for (int i = 1; i < n; ++i) {
    int u = read(), v = read();
    Add(u, v);
    Add(v, u);
  }
  dfs(1, 0);
  printf("%d\n", f[1][1]);
  return 0;
}
