이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define ll long long
#define int ll
#define eps 1e-7
#define all(x) ((x).begin()),((x).end())
#define usecppio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
using pii = pair<int, int>;
int n;
vector<vector<int>> G;
vector<pii> edges;
int minval, maxval;
int minarr[101010], maxarr[101010];
vector <int> tp;
int par[101010];
int sub[101010];
int level[101010];
void aux(int rt, int p)
{
    level[rt] = level[p]+1;
    sub[rt]++;
    par[rt] = p;
    tp.push_back(rt);
    for (int nxt : G[rt])
    {
        if (nxt != p)
        {
            aux(nxt, rt);
            sub[rt] += sub[nxt];
        }
    }
}
void solve_min()
{
    int cnt = 0;
    aux(1, 0);
    par[1] = G[1].front();
    while(!tp.empty())
    {
        int cur = tp.back();
        if (minarr[cur] == cur)
        {
            swap(minarr[cur], minarr[par[cur]]);
            cnt += 2;
        }
        tp.pop_back();
    }
    minval = cnt;
    par[1] = 0;
    return;
}
pair<bool, int> is_center(int rt, int p)
{
    int max_sub = 0, sum_sub = 0, index = rt;
    for (int nxt : G[rt])
    {
        if (nxt != p)
        {
            if (max_sub <= sub[nxt])
            {
                max_sub = sub[nxt];
                index = nxt;
            }
            sum_sub += sub[nxt];
        }
    }
    if (n-1-sum_sub >= max_sub)
    {
        max_sub = n-1-sum_sub;
        index = par[rt];
    }
    return {max_sub <= n/2, index};
}
int center(int rt, int p)
{
    auto u = is_center(rt, p);
    if (u.first) return rt;
    else
    {
        return center(u.second, rt);
    }
}
vector <deque<int>> D;
deque <int> seats;
void alloc_seat(int rt, int p)
{
    seats.push_back(rt);
    for (int nxt : G[rt])
        if (nxt != p)
            alloc_seat(nxt, rt);
}
void solve_max()
{
    int cent = center(1, 0);
    for (pii e : edges)
    {
        int a = e.first, b = e.second;
        if (level[a] > level[b]) swap(a, b);
        int passes = 2*min(sub[b], n-sub[b]);
        maxval += passes;
    }
    memset(sub, 0, sizeof(sub));
    memset(par, 0, sizeof(par));
    memset(level, 0, sizeof(level));
    aux(cent, 0);
    sort(all(G[cent]), [](int a, int b)->bool{return sub[a] > sub[b];});
    for (int head : G[cent])
    {
        alloc_seat(head, cent);
        D.push_back(seats);
        seats.clear();
    }
    if (n%2 == 0)
        D.push_back({cent});
    /*for (int i = 0; i<D.size(); i++)
    {
        printf("D[%lld] : ",i);
        for (auto it:D[i])
            printf("%lld ",it);
        printf("\n");
    }*/
    for (int i = 0; i<D.size(); i++)
    {
        if (D[i].empty()) continue;
        int cur = i+1;
        while (!D[i].empty())
        {
            while ((D[cur].size() > 0) && (D[i].size() > 0))
            {
                if (D[cur].empty())
                    break;
                swap(maxarr[D[cur].front()], maxarr[D[i].front()]);
                D[cur].pop_front();
                D[i].pop_front();
            }
            cur++;
        }
    }
    if (n%2 != 0)
        swap(maxarr[cent], maxarr[G[cent].front()]);
}
int32_t main()
{
    usecppio
    cin >> n;
    G.resize(n+5);
    for (int i = 1; i<n; i++)
    {
        int u, v; cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
        edges.push_back({u, v});
    }
    for (int i = 1; i<=n; i++)
        minarr[i] = maxarr[i] = i;
    solve_min();
    //solve_max();
    cout << minval << ' ' << maxval << '\n';
    for (int i = 1; i<=n; i++)
        cout << minarr[i] << ' ';
    cout << '\n';
    for (int i = 1; i<=n; i++)
        cout << maxarr[i] << ' ';
    cout << '\n';
}
컴파일 시 표준 에러 (stderr) 메시지
Village.cpp: In function 'void solve_max()':
Village.cpp:123:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::deque<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  123 |     for (int i = 0; i<D.size(); i++)
      |                     ~^~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |