func_code_string: #include <bits/stdc++.h>   using namespace std;   const int LIMIT = 20;   int n, dep[300001];   vector<int> adj[300001];   int dp[300001][LIMIT], dp2[300001][LIMIT];   void dfs(int x, int pre) {     vector<int> child;     for (auto y : adj[x]) {       if (y != pre) {         dfs(y, x);         child.push_back(y);         dep[x] = max(dep[x], dep[y] + 1);       }     }     dp[x][1] = dp2[x][1] = n;     for (int i = 2; i < LIMIT; ++i) {       int lo = 0, hi = n;       while (lo < hi) {         int md = lo + hi + 1 >> 1, tot = 0;         for (auto y : child) {           if (dp[y][i - 1] >= md) {             ++tot;           }         }         (tot >= md) ? lo = md : hi = md - 1;       }       dp[x][i] = dp2[x][i] = lo + hi >> 1;       for (auto y : child) {         dp2[x][i] = max(dp2[x][i], dp2[y][i]);       }     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i < n; ++i) {       int x, y;       scanf( %d%d , &x, &y), --x, --y;       adj[x].push_back(y);       adj[y].push_back(x);     }     dfs(0, -1);     long long ans = 0LL;     for (int i = 0; i < n; ++i) {       ans += dep[i];     }     for (int u = 0; u < n; ++u) {       for (int i = 1; i < LIMIT; ++i) {         int lo = 2, hi = dp2[u][i];         if (i + 1 < LIMIT) {           lo = max(lo, dp2[u][i + 1] + 1);         }         if (lo <= hi) {           ans += (long long)(hi - lo + 1) * (i - 1);         }       }     }     ans += (long long)n * n;     cout << ans << endl;   }   