constint N = 1000010; constint M = N << 1; int h[N], e[M], ne[M], idx; int n, id; ll sum, ans; ll siz[N];
voidadd(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx++; }
voiddfs1(int u, int fa){ siz[u] = 1; for(int i = h[u]; i != -1; i = ne[i]) { int v = e[i]; if(v != fa) { dfs1(v, u); sum += siz[u] * siz[v] * u; siz[u] += siz[v]; } } }
voiddfs2(int u, int fa){ if(sum > ans) { ans = sum; id = u; } for(int i = h[u]; i != -1; i = ne[i]) { int v = e[i]; if(v != fa) { ll temp = siz[v] * (n - siz[v]) * (u - v); sum -= temp; dfs2(v, u); sum += temp; } } }
voidsolve(int ca){ scanf("%d", &n); memset(h, -1, (n + 1) * sizeof(int)); idx = 0; for(int i = 1; i < n; ++i) { int a, b; scanf("%d%d", &a, &b); add(a, b); add(b, a); } dfs1(1, -1); ans = 0; dfs2(1, -1); printf("%d %lld\n", id, ans * 2 + 1ll * n * (n + 1) / 2); }
intmain() { int T = 1; // scanf("%d", &T); for(int i = 1; i <= T; ++i) solve(i);