from sys import stdin input = stdin.readline from types import GeneratorType def bootstrap(f, stack=[]): def wrappedfunc(*args, **kwargs): if stack: return f(*args, **kwargs) to = f(*args, **kwargs) while True: if type(to) is GeneratorType: stack.append(to) to = next(to) else: stack.pop() if not stack: break to = stack[-1].send(to) return to return wrappedfunc INF = 1<<60 N = int(input()) G = [[] for _ in range(N)] for _ in range(N-1): u, v = map(int, input().split()) u, v = u-1, v-1 G[u].append(v) G[v].append(u) @bootstrap def dfs(n, p): res1, res2 = 0, 1 for i, v in enumerate(G[n]): if v == p: continue a, b = yield dfs(v, n) dp[n][0][i] = a dp[n][1][i] = b res1 += max(a, b) res2 += a yield res1, res2 dp = [[[-INF]*len(G[i]) for _ in range(2)] for i in range(N)] dfs(0, -1) def LRset(n): for i in range(1, len(G[n])): L[n][0][i] = L[n][0][i-1]+dp[n][0][i-1] L[n][1][i] = L[n][1][i-1]+max(dp[n][0][i-1], dp[n][1][i-1]) for i in reversed(range(len(G[n])-1)): R[n][0][i] = R[n][0][i+1]+dp[n][0][i+1] R[n][1][i] = R[n][1][i+1]+max(dp[n][0][i+1], dp[n][1][i+1]) L = [[[0]*(len(G[i])) for _ in range(2)] for i in range(N)] R = [[[0]*(len(G[i])) for _ in range(2)] for i in range(N)] LRset(0) @bootstrap def rerooting(n, pre, no): visited[n] = True preno = 0 for i in range(len(G[n])): if G[n][i] == pre: preno = i break dp[n][0][preno] = L[pre][1][no]+R[pre][1][no] dp[n][1][preno] = L[pre][0][no]+R[pre][0][no]+1 LRset(n) for i in range(len(G[n])): if not visited[G[n][i]]: yield rerooting(G[n][i], n, i) yield visited = [False]*N visited[0] = True for i in range(len(G[0])): if not visited[G[0][i]]: rerooting(G[0][i], 0, i) ans = INF for i in range(N): SUM = 1 for j in range(len(G[i])): SUM += dp[i][0][j] ans = min(ans, SUM) print(ans)