Submission #1234545

#TimeUsernameProblemLanguageResultExecution timeMemory
1234545ericl23302Beech Tree (IOI23_beechtree)C++20
0 / 100
0 ms324 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> dfs(vector<vector<int>> &children, vector<int> &P, vector<int> &C, vector<int> &res, int cur) {
    vector<int> nodes = {cur};
    for (auto &i : children[cur]) {
        auto v = dfs(children, P, C, res, i);
        for (auto &n : v) nodes.push_back(n);
    }

    sort(nodes.begin() + 1, nodes.end());
    do {
        map<int, int> cnts;
        bool ok = true;
        for (int i = 1; i < nodes.size(); ++i) {
            if (nodes[cnts[C[nodes[i]]]] != P[nodes[i]]) {
                ok = false;
                break;
            }
            ++cnts[C[nodes[i]]];
        }
        if (ok) {
            res[cur] = 1;
            return nodes;
        }
    } while (next_permutation(nodes.begin() + 1, nodes.end()));

    return nodes;
}

std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
    // vector<vector<int>> children(N);
    // for (int i = 1; i < N; ++i) children[P[i]].push_back(i);
    vector<int> res(N, 0);
    // dfs(children, P, C, res, 0);

    res[N - 1] = 1;
    for (int i = N - 2; i >= 0; --i) {
        if (C[i] != C[i + 1]) break;
        res[i] = 1;
    }

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