Submission #1029609

#TimeUsernameProblemLanguageResultExecution timeMemory
1029609Mr_HusanboyBeech Tree (IOI23_beechtree)C++17
9 / 100
29 ms9424 KiB
#include "beechtree.h"
#include <bits/stdc++.h>


#ifdef LOCAL
#include "debugger.cpp"
#else
#define debug(...)
#endif

using namespace std;

#define ff first
#define ss second
#define all(a) (a).begin(), (a).end()
#define ll long long

template<typename T>
int len(T &a){
    return a.size();
}

mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

vector<int> beechtree(int n, int m, std::vector<int> par, std::vector<int> col)
{
    assert(n <= 8);
    vector<vector<int>> g(n);
    for(int i = 1; i < n; i ++){
        g[par[i]].push_back(i);
        col[i] --;
    }

    vector<int> res(n);
    vector<int> cnt(m + 1);

    auto check = [&](int &node, vector<int> &perm){
        if(perm[0] != node) return false;
        vector<int> f(len(perm));


        for(int i = 1; i < len(perm); i ++){
            f[i] = cnt[col[perm[i]]];
            cnt[col[perm[i]]] ++;
        }
        for(int i = 1; i < len(perm); i ++) cnt[col[perm[i]]] --;
        //debug(f, cnt);
        for(int i = 1; i < len(perm); i ++){
            if(perm[f[i]] != par[perm[i]]) return false;
        }
        return true;
    };  


    auto dfs = [&](auto &dfs, int i)->vector<int>{
        vector<int> perm = {i};
        for(auto u : g[i]){
            auto r = dfs(dfs, u);
            if(len(perm) < len(r)) swap(perm, r);
            for(auto u : r) perm.push_back(u);
        }
        sort(all(perm));
        //debug(perm);
        do{
            if(check(i, perm)){
                res[i] = 1;
                break;
            }
        }while(next_permutation(all(perm)));

        return perm;
    };
    dfs(dfs, 0);
    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...