Submission #1311677

#TimeUsernameProblemLanguageResultExecution timeMemory
1311677giatri1904Papričice (COCI20_papricice)C++20
50 / 110
12 ms580 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
int n;
vector<int> adj[MAXN];
int parent[MAXN], sz[MAXN];
int tin[MAXN], tout[MAXN], timer;
void dfs(int u, int p) {
    parent[u] = p;
    sz[u] = 1;
    tin[u] = ++timer;

    for (int v : adj[u]) {
        if (v == p) continue;
        dfs(v, u);
        sz[u] += sz[v];
    }

    tout[u] = timer;
}
bool ok(int u, int v) {
    return tin[u] <= tin[v] && tout[v] <= tout[u];
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    //freopen("a.inp","r",stdin);
    //freopen("a.out","w",stdout);
    cin >> n;
    for (int i = 1; i < n; i++) {
        int x, y;
        cin >> x >> y;
        adj[x].push_back(y);
        adj[y].push_back(x);
    }
    dfs(1, 0);
    int ans = n;
    for (int u = 2; u <= n; u++) {
        for (int v = u + 1; v <= n; v++) {
            int a, b, c;
            if (ok(u, v)) {
                a = sz[v];
                b = sz[u] - sz[v];
                c = n - sz[u];
            }
            else if (ok(v, u)) {
                a = sz[u];
                b = sz[v] - sz[u];
                c = n - sz[v];
            }
            else {
                a = sz[u];
                b = sz[v];
                c = n - sz[u] - sz[v];
            }

            int mx = max({a, b, c});
            int mn = min({a, b, c});
            ans = min(ans, mx - mn);
        }
    }
    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...