func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     int v, d;     bool operator<(const node &a) const {       if (d == a.d) return v < a.v;       return a.d < d;     }   };   set<node> s;   vector<int> adj[200005];   int d[200005], p[200005];   bool vis[200005];   void dfs(int u) {     int l = adj[u].size();     node nd;     vis[u] = true;     for (int a = 0; a < l; a++) {       int v = adj[u][a];       if (!vis[v] && v != p[u]) dfs(v);     }     nd.v = u, nd.d = d[u];     s.erase(nd);   }   int main() {     int n, ans = 0;     cin >> n;     for (int a = 1; a < n; a++) {       int u, v;       cin >> u >> v;       adj[u].push_back(v);       adj[v].push_back(u);     }     queue<int> q;     node nd;     q.push(1);     d[1] = p[1] = 0, vis[1] = true;     while (!q.empty()) {       int u = q.front();       q.pop();       nd.v = u, nd.d = d[u];       s.insert(nd);       int l = adj[u].size();       for (int a = 0; a < l; a++) {         int v = adj[u][a];         if (vis[v]) continue;         d[v] = 1 + d[u], p[v] = u;         q.push(v), vis[v] = true;       }     }     memset(vis, false, sizeof(vis));     while (!s.empty()) {       nd = *(s.begin());       if (nd.d > 2) {         dfs(p[nd.v]), ans++;         nd.v = p[p[nd.v]];         nd.d = d[nd.v];         s.erase(nd);       } else         break;     }     cout << ans << endl;     return 0;   }   