谢谢!
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int si[maxn], dp[maxn], f[maxn];
int n, wh = 2e9, mi = 2e9;
vector <int> v[maxn];
void dfs(int x, int fr) {
f[x] = fr;
si[x] = 1;
if (!x) return;
for (int i = 0; i < v[x].size(); i++)
if (v[x][i] != fr) {
dfs(v[x][i], x);
si[x] += si[v[x][i]];
}
}
void Dp(int x) {
if (x > 1) dp[x] = dp[f[x]] + n - 2 * si[x];
if (dp[x] < mi) {
mi = dp[x];
wh = x;
}
if (dp[x] == mi) wh = min(wh, x);
if (!x) return;
for (int i = 0; i < v[x].size(); i++)
if (v[x][i] != f[x]) Dp(v[x][i]);
}
int main() {
scanf("%d", &n);
for (int i = 1; i < n; i++) {
int u, V;
scanf("%d%d", &u, &V);
v[u].push_back(V);
v[V].push_back(u);
}
dfs(1, 0);
for (int i = 1; i <= n; i++) dp[1] += si[i];
dp[1] -= n;
Dp(1);
printf("%d %d", wh, mi);
}