1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <bits/stdc++.h> using namespace std; const int N = 10010, M = 2 * N; int h[N], e[M], ne[M], idx; bool st[N]; int ans = N; int n, a, b; void add(int a, int b) { e[idx] = b; ne[idx] = h[a]; h[a] = idx++; }
int dfs(int u) { st[u] = true; int res = 0, sum = 1; for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (!st[j]) { int s = dfs(j); res = max(res, s); sum += s; } } res = max(res, n - sum); ans = min(ans, res); return sum; }
signed main() { cin >> n; memset(h, -1, sizeof(h)); for (int i = 0; i < n - 1; i++) { cin >> a >> b; add(a, b), add(b, a); } dfs(1); cout << ans << endl; }
|