#include <bits/stdc++.h>
using namespace std;
const int Nmax = 3005;
vector<int> adj[Nmax];
int f[Nmax][Nmax];
int g[Nmax][2];
int c[Nmax][Nmax];
int cha[Nmax];
int u, v, n, ans;
int solvef(int u, int p) {
  if (f[u][p] != -1) return f[u][p];
  f[u][p] = 0;
  for (int v : adj[u]) {
    if (v != p) {
      f[u][p] += solvef(v, u) + c[u][v];
    }
  }
  return f[u][p];
}
void dfs(int u, int p) {
  int res = 0;
  cha[u] = p;
  if (cha[p] == -1)
    res = f[p][u];
  else
    res = f[p][cha[p]] - f[u][p] - c[p][u];
  g[u][0] = g[p][0] + res + c[p][u];
  g[u][1] = min(g[p][0], g[p][1]) + res + c[u][p];
  ans = min(ans, min(g[u][0], g[u][1]) + f[u][p]);
  for (int v : adj[u]) {
    if (v != p) dfs(v, u);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
    c[v][u] = 1;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      f[i][j] = -1;
    }
  for (int u = 1; u <= n; u++) {
    for (int v : adj[u]) {
      if (f[u][v] == -1) f[u][v] = solvef(u, v);
    }
  }
  ans = 1e9;
  for (int i = 1; i <= n; i++) {
    g[i][0] = 0;
    g[i][1] = 0;
    cha[i] = -1;
    for (int v : adj[i]) {
      dfs(v, i);
    }
  }
  if (n == 1) ans = 0;
  cout << ans;
  return 0;
}
