답안 #986525

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
986525 2024-05-20T17:49:22 Z HiepVu217 Papričice (COCI20_papricice) C++17
50 / 110
235 ms 33972 KB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 17;
int n, sz[N], ans, ti;
vector <int> adj[N];
multiset <int> in, out;
void dfs (int u, int pr)
{
    ++sz[u];
    for (int v: adj[u])
    {
        if (v == pr)
        {
            continue;
        }
        dfs (v, u);
        sz[u] += sz[v];
    }
}
void calc (int u, int pr)
{
    if (u > 1)
    {
        int a, b, c;

        auto x = in.lower_bound ((n - sz[u]) / 2 + sz[u]);
        if (x != in.begin())
        {
            --x;
            a = n - *x, b = *x - sz[u], c = sz[u];
            ans = min (ans, max ({abs (a - b), abs (b - c), abs (c - a)}));
            ++x;
        }
        if (x != in.end())
        {
            a = n - *x, b = *x - sz[u], c = sz[u];
            ans = min (ans, max ({abs (a - b), abs (b - c), abs (c - a)}));
        }

        x = out.lower_bound ((n - sz[u]) / 2);
        if (x != out.begin())
        {
            --x;
            a = n - *x - sz[u], b = *x, c = sz[u];
            ans = min (ans, max ({abs (a - b), abs (b - c), abs (c - a)}));
            ++x;
        }
        if (x != out.end())
        {
            a = n - *x - sz[u], b = *x, c = sz[u];
            ans = min (ans, max ({abs (a - b), abs (b - c), abs (c - a)}));
        }

        in.insert (sz[u]);
    }

    for (int v: adj[u])
    {
        if (v == pr)
        {
            continue;
        }
        calc (v, u);
    }
    if (u > 1)
    {
        out.insert (sz[u]);
    }
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1, u, v; i < n; ++i)
    {
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs (1, 0);
    ans = 1e9;
    calc (1, 0);
    cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4956 KB Output is correct
2 Correct 2 ms 4956 KB Output is correct
3 Correct 1 ms 4956 KB Output is correct
4 Correct 2 ms 5208 KB Output is correct
5 Correct 1 ms 4956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4956 KB Output is correct
2 Correct 2 ms 4956 KB Output is correct
3 Correct 1 ms 4956 KB Output is correct
4 Correct 2 ms 5208 KB Output is correct
5 Correct 1 ms 4956 KB Output is correct
6 Correct 2 ms 5208 KB Output is correct
7 Correct 2 ms 5212 KB Output is correct
8 Correct 2 ms 5212 KB Output is correct
9 Correct 2 ms 5212 KB Output is correct
10 Correct 2 ms 5212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4956 KB Output is correct
2 Correct 2 ms 4956 KB Output is correct
3 Correct 1 ms 4956 KB Output is correct
4 Correct 2 ms 5208 KB Output is correct
5 Correct 1 ms 4956 KB Output is correct
6 Correct 2 ms 5208 KB Output is correct
7 Correct 2 ms 5212 KB Output is correct
8 Correct 2 ms 5212 KB Output is correct
9 Correct 2 ms 5212 KB Output is correct
10 Correct 2 ms 5212 KB Output is correct
11 Correct 202 ms 33364 KB Output is correct
12 Correct 235 ms 33444 KB Output is correct
13 Correct 180 ms 33972 KB Output is correct
14 Correct 171 ms 33640 KB Output is correct
15 Incorrect 232 ms 33384 KB Output isn't correct
16 Halted 0 ms 0 KB -