// @EXPECTED_RESULTS@: TIME_LIMIT_EXCEEDED,WRONG_ANSWER #include using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define trav(a, x) for(auto& a : x) #define all(x) x.begin(), x.end() #define sz(x) (int)(x).size() typedef vector vi; const int MAXN = 200001; vector graph(MAXN, vi()); int n; vi solve(int i, int par){ vi res = {1}; int outdeg = sz(graph[i]) - (par != -1); if(outdeg == 0)return {1}; if(outdeg == 1)return {1, 1}; vi f1 = {}; vi f2 = {}; trav(y, graph[i]){ if(y != par){ vi tmp = solve(y, i); if(sz(f1) == 0){ f1 = tmp; } else{ f2 = tmp; } } } if(sz(f1) > sz(f2))swap(f1,f2); rep(c1,0,sz(f2)){ int a = f2[c1]; if(c1 > sz(f1))a = 0; res.push_back(a); } rep(c1,0,sz(f1)){ res[c1+1] += f1[c1]; } return res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; rep(c1,0,n-1){ int a,b; cin >> a >> b; a--; b--; graph[a].push_back(b); graph[b].push_back(a); } vi ans = solve(0,-1); int sum = 0; trav(y, ans){ sum += y; } cout << n-sum << "\n"; return 0; }