Submission #1065558

#TimeUsernameProblemLanguageResultExecution timeMemory
1065558cpdreamer참나무 (IOI23_beechtree)C++17
9 / 100
32 ms9292 KiB
#include "beechtree.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define V vector
#define S second
#define F first
#define pb push_back
#define all(v) v.begin(),v.end()
using namespace std;
V<pair<int,int>>adj[(int)10];
V<V<pair<int,int>>>nodes(10);
V<int>b(10);
V<int>parent;
V<int>color;
bool check(V<pair<int,int>>permutation){
    if(permutation[0].S!=0)
        return false;
    int size=(int)permutation.size();
    for(int i=size-1;i>0;i--){
        int c=0;
        for(int j=i-1;j>=0;j--){
            if(permutation[j].S==permutation[i].S){
                c++;
            }
        }
        if(permutation[c].F!=parent[permutation[i].F]){
            return false;
        }
    }
    return true;
}
void dfs(int n,int p){
    nodes[n].pb({n,0});
    for(auto u:adj[n]){
        if(u.F==p)continue;
        dfs(u.F,n);
        nodes[u.F][0].S=color[u.F];
        nodes[n].insert(nodes[n].end(),all(nodes[u.F]));
        nodes[u.F][0].S=0;
    }
    sort(all(nodes[n]));
    if(nodes[n].size()==1){
        b[n]=1;
        return;
    }
    do{
        if(check(nodes[n])){
            b[n]=1;
            return;
        }
    }while(next_permutation(all(nodes[n])));
    b[n]=0;
}
std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
    for(int i=1;i<N;i++){
        adj[P[i]].pb({i,C[i]});
        adj[i].pb({P[i],C[i]});
    }
    for(int i=0;i<N;i++)
        parent.pb(P[i]);
    for(int i=0;i<N;i++)
        color.pb(C[i]);
    dfs(0,-1);
    V<int>ans;
    for(int i=0;i<N;i++)
        ans.pb(b[i]);
    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...