#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 1e6 + 10;
vector<int> a[N];
int dep[N], vis[N];
struct Node {
int root, siz;
};
vector<Node> so[N];
int siz[N];
bool cmp(Node x, Node y) {
return x.siz > y.siz;
}
void dfs1(int x) {
vis[x] = 1;
for(int v : a[x]) {
if(vis[x]) continue;
dep[v] = dep[x] + 1;
dfs1(v);
siz[x] += siz[v] + 1;
}
}
int f[N];
void dfs2(int x) {
vis[x] = 1;
int all = 0;
for(int v : a[x]) {
if(vis[v]) continue;
dfs2(v);
so[x].push_back({v, f[v]});
all += f[v] + 1;
}
if(so[x].size() == 0) f[x] = dep[x];
else {
sort(so[x].begin(), so[x].end(), cmp);
int minn = 0x7fffffff;
int left = 0;
for(int i = 1; i < so[x].size(); i++) {
left += so[x][i].siz;
minn = min(minn, 2 * (all - left) + left + i * dep[x]);
}
f[x] = minn;
}
}
int main() {
scanf("%d", &n);
for(int i = 1; i < n; i++) {
int u, v;
scanf("%d%d", &u, &v);
a[u].push_back(v);
a[v].push_back(u);
}
dfs1(1);
memset(vis, 0, sizeof(vis));
dfs2(1);
printf("%d\n", f[1]);
}