Submission #1233994

#TimeUsernameProblemLanguageResultExecution timeMemory
1233994mariza참나무 (IOI23_beechtree)C++20
9 / 100
26 ms3400 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll N=8;

vector<ll> sub;
vector<ll> t[N];
void dfs(ll curr){
    sub.push_back(curr);
    for(auto nxt:t[curr]){
        dfs(nxt);
    }
}

vector<int> beechtree(int n, int m, vector<int> p, vector<int> c){
    for(ll i=1; i<n; i++){
        t[p[i]].push_back(i);
    }

    vector<int> ans;
    for(ll i=0; i<n; i++){
        sub.clear();
        dfs(i);
        
        ans.push_back(0);
        do{
            // cout<<i<<endl;
            ll f[n], x[m+1]={};
            for(auto j:sub){
                if(j==i) continue;
                f[j]=x[c[j]];
                x[c[j]]++;
            }

            bool ok=1;
            for(auto j:sub){
                if(j==i) continue;
                if(sub[f[j]]!=p[j]) ok=0;
            }

            ans[i]|=ok;
        } while(next_permutation(sub.begin()+1,sub.end()));
    }

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