#include <bits/stdc++.h>
using namespace std;
int mod = 1000000007;
template <class C>
void mini(C& a, C b) {
  a = min(a, b);
}
template <class C>
void maxi(C& a, C b) {
  a = max(a, b);
}
void a() {
  int n, s, t;
  cin >> n >> s >> t;
  int st = s + t - n;
  s -= st;
  t -= st;
  cout << max(1, max(s, t) + 1) << '\n';
}
bool sePuede(vector<vector<int> >& apariciones, vector<int>& aT, int mid) {
  if (mid == 0) return false;
  for (int i = 0; i < 26; i++)
    if (apariciones[i][mid - 1] < aT[i]) return false;
  return true;
}
void b() {
  int n;
  cin >> n;
  string s;
  cin >> s;
  vector<vector<int> > aparicionesEnPrefijoPorLetra(26, vector<int>(n, 0));
  for (int i = 0; i < n; i++) {
    int pos = (int)s[i] - (int)'a';
    aparicionesEnPrefijoPorLetra[pos][i]++;
  }
  for (int(i) = 1; i <= n - 1; i++) {
    for (int j = 0; j < 26; j++) {
      aparicionesEnPrefijoPorLetra[j][i] +=
          aparicionesEnPrefijoPorLetra[j][i - 1];
    }
  }
  int m;
  cin >> m;
  string t;
  for (int i = 0; i < m; i++) {
    cin >> t;
    vector<int> aT(26);
    for (int j = 0; j < t.size(); j++) {
      int pos = (int)t[j] - (int)'a';
      aT[pos]++;
    }
    int lo = 0;
    int hi = n;
    while (lo + 1 != hi) {
      int mid = (lo + hi) / 2;
      if (sePuede(aparicionesEnPrefijoPorLetra, aT, mid))
        hi = mid;
      else
        lo = mid;
    }
    cout << hi << '\n';
  }
}
void c() {
  int n, m;
  cin >> n >> m;
  int t, l, r;
  vector<pair<int, int> > desordenados;
  vector<bool> crece(n + 1, false);
  for (int i = 0; i < m; i++) {
    cin >> t >> l >> r;
    if (t == 1) {
      for (int k = l + 1; k <= r; k++) crece[k] = true;
    } else
      desordenados.push_back(make_pair(l, r));
  }
  bool sePuede = true;
  for (int i = 0; i < desordenados.size(); i++) {
    bool creciente = true;
    for (int k = desordenados[i].first + 1; k <= desordenados[i].second; k++)
      if (!crece[k]) creciente = false;
    if (creciente) sePuede = false;
  }
  if (sePuede) {
    cout << "YES\n";
    int i = 1;
    int num = 2000;
    while (i <= n) {
      if (!crece[i]) {
        num--;
        cout << num << ' ';
        i++;
      } else {
        num++;
        cout << num << ' ';
        i++;
      }
    }
    cout << '\n';
  } else
    cout << "NO\n";
}
void dfs(vector<vector<int> >& grafo, vector<int>& padre,
         vector<vector<int> >& hijos, vector<bool>& visto, int nodo) {
  visto[nodo] = true;
  for (int i = 0; i < grafo[nodo].size(); i++) {
    int hijo = grafo[nodo][i];
    if (visto[hijo]) continue;
    padre[hijo] = nodo;
    hijos[nodo].push_back(hijo);
    dfs(grafo, padre, hijos, visto, hijo);
  }
}
void calcularCardinales(vector<long long>& cardinal,
                        vector<vector<int> >& hijos, int nodo) {
  for (int i = 0; i < hijos[nodo].size(); i++) {
    calcularCardinales(cardinal, hijos, hijos[nodo][i]);
    cardinal[nodo] += cardinal[hijos[nodo][i]];
  }
  cardinal[nodo]++;
}
void calcularHaciaArriba(vector<long long>& res, vector<long long>& cardinal,
                         vector<vector<int> >& hijos, int nodo) {
  res[nodo] = cardinal[nodo];
  for (int i = 0; i < hijos[nodo].size(); i++) {
    calcularHaciaArriba(res, cardinal, hijos, hijos[nodo][i]);
    res[nodo] += res[hijos[nodo][i]];
  }
}
void bajarResultado(vector<long long>& res, vector<long long>& cardinal,
                    vector<int>& padre, vector<vector<int> >& hijos, int nodo) {
  if (padre[nodo] > 0) {
    int papi = padre[nodo];
    res[nodo] += res[papi] - res[nodo] - cardinal[nodo];
    res[nodo] += res.size() - 1 - cardinal[nodo];
  }
  for (int i = 0; i < hijos[nodo].size(); i++)
    bajarResultado(res, cardinal, padre, hijos, hijos[nodo][i]);
}
void e() {
  int n;
  cin >> n;
  vector<vector<int> > grafo(n + 1);
  int u, v;
  for (int i = 0; i < n - 1; i++) {
    cin >> u >> v;
    grafo[u].push_back(v);
    grafo[v].push_back(u);
  }
  vector<int> padre(n + 1);
  vector<vector<int> > hijos(n + 1);
  vector<bool> visto(n + 1, false);
  dfs(grafo, padre, hijos, visto, 1);
  vector<long long> cardinal(n + 1);
  calcularCardinales(cardinal, hijos, 1);
  vector<long long> res(n + 1);
  calcularHaciaArriba(res, cardinal, hijos, 1);
  bajarResultado(res, cardinal, padre, hijos, 1);
  long long optimo = 0;
  for (int(i) = 1; i <= n; i++) maxi(optimo, res[i]);
  cout << optimo << '\n';
}
void f() {}
int main() {
  e();
  return 0;
}
