Submission #1234546

#TimeUsernameProblemLanguageResultExecution timeMemory
1234546ericl23302참나무 (IOI23_beechtree)C++20
5 / 100
39 ms4272 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] = res[N - 2] = 1;
    for (int i = N - 3; i >= 0; --i) {
        if (C[i + 1] != C[i + 2]) 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...