Submission #1211283

#TimeUsernameProblemLanguageResultExecution timeMemory
1211283omsincoconutBeech Tree (IOI23_beechtree)C++17
18 / 100
2093 ms24044 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
    vector<int> ret(N);

    vector<vector<int>> child(N);
    for (int i = 1; i < N; i++) child[P[i]].push_back(i);

    for (int i = 0; i < N; i++) {
        bool can = true;

        map<int, int> cnt;
        priority_queue<tuple<int, int, int>> dt;
        vector<int> seq;
        
        dt.emplace(child[i].size(), -1, i);
        while (!dt.empty()) {
            auto [szu, ppu, u] = dt.top();
            dt.pop();
            seq.push_back(u);

            if (u != i) {
                can &= seq[cnt[C[u]]] == P[u];
                cnt[C[u]]++;
            }

            for (int v : child[u]) {
                dt.emplace(child[v].size(), -(int)seq.size(), v);
            }
        }

        // for (int u : seq) cout << u << " ";
        // cout << "\n";

        ret[i] = can;
    }

    return ret;
}
#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...