제출 #1211297

#제출 시각아이디문제언어결과실행 시간메모리
1211297omsincoconut참나무 (IOI23_beechtree)C++17
18 / 100
2089 ms17888 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> normalize(vector<int> a) {
    vector<int> as = a;
    sort(as.begin(), as.end());
    for (int &i : a) i = lower_bound(as.begin(), as.end(), i) - as.begin();
    return a;
}

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

    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;

        vector<int> cnt(N);
        priority_queue<tuple<int, int, int>> dt;
        vector<int> seq;
        
        dt.emplace(child[i].size(), -1, i);
        while (!dt.empty()) {
            int szu, ppu, u;
            tie(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);
            }
        }

        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...