#include <bits/stdc++.h>
using namespace std;
struct edge {
  int b;
  bool x;
  edge *next;
} E[100010], *rt[100010];
int o = 0;
int mi = 100000000;
int N;
void addedge(int a, int b) {
  edge *p = &E[o++];
  p->b = b;
  p->x = false;
  p->next = rt[a];
  rt[a] = p;
  p = &E[o++];
  p->b = a;
  p->x = true;
  p->next = rt[b];
  rt[b] = p;
}
int S[10010];
bool jud[10010];
void init() {
  for (int i = 1; i <= N; i++) {
    jud[i] = false;
    S[i] = 0;
  }
}
void pdfs(int n) {
  jud[n] = true;
  for (edge *p = rt[n]; p != NULL; p = p->next) {
    int b = p->b;
    if (!jud[b]) {
      pdfs(b);
      S[n] += S[b];
      if (p->x) S[n]++;
    }
  }
}
void dfs(int n, int s0, int s1) {
  jud[n] = true;
  int b, s, t0, t1;
  for (edge *p = rt[n]; p != NULL; p = p->next) {
    b = p->b;
    if (!jud[b]) {
      s = S[n];
      mi = min(mi, s + s0);
      t0 = s + s0 - S[b];
      if (p->x)
        s = S[n] - 1;
      else
        s = S[n] + 1;
      mi = min(mi, s + s1);
      t1 = s + s1 - S[b];
      s = S[n] - (p->x == true);
      mi = min(mi, s + s0);
      t1 = min(t1, s + s0 - S[b]);
      dfs(b, t0, t1);
    }
  }
}
int main() {
  o = 0;
  int i, j, k;
  int a, b, s;
  scanf("%d", &N);
  if (N == 1) {
    printf("0\n");
    return 0;
  }
  for (i = 0; i <= N; i++) {
    rt[i] = NULL;
  }
  for (i = 1; i < N; i++) {
    scanf("%d%d", &a, &b);
    addedge(a, b);
  }
  for (i = 1; i <= N; i++) {
    init();
    pdfs(i);
    for (j = 0; j <= N; j++) jud[j] = false;
    dfs(i, 0, 0);
  }
  printf("%d\n", mi);
  return 0;
}
