Submission #845866

#TimeUsernameProblemLanguageResultExecution timeMemory
845866sebinkimBeech Tree (IOI23_beechtree)C++17
58 / 100
2049 ms56144 KiB
#include <bits/stdc++.h>
#include "beechtree.h"

using namespace std;
using piii = tuple<int, int, int>;

vector<int> T[202020];
vector<int> P, C;
int S[202020], K[202020];
int n, m;

void dfs(int u, vector<int> &A) {
    S[u] = 1;
    for (int &v: T[u]) {
        dfs(v, A);
        S[u] += S[v];
    }

    priority_queue<piii> Q;
    vector<int> V;

    fill(K, K + m + 1, 0);
    Q.emplace(S[u], 0, u);

    for (; !Q.empty(); ) {
        auto [_, __, v] = Q.top();
        Q.pop();

        if (v != u) {
            if (K[C[v]] >= V.size() || V[K[C[v]]] != P[v]) return;
            K[C[v]]++;
        }
        V.push_back(v);

        for (int &w: T[v]) {
            Q.emplace(S[w], -V.size(), w);
        }
    }

    A[u] = 1;
}

vector<int> beechtree(int n, int m, vector<int> P, vector<int> C) {
    ::C = C; ::P = P; ::n = n; ::m = m;

    int i;

    for (i = 1; i < n; i++) {
        T[P[i]].push_back(i);
    }

    vector<int> A(n);

    dfs(0, A);

    return A;
}

Compilation message (stderr)

beechtree.cpp: In function 'void dfs(int, std::vector<int>&)':
beechtree.cpp:30:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |             if (K[C[v]] >= V.size() || V[K[C[v]]] != P[v]) return;
      |                 ~~~~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...