# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1008708 | aaaaaarroz | 참나무 (IOI23_beechtree) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
vector<int>padre;
vector<vector<int>>graph;
vector<int>sub;
void dfs(int nodo){
sub.push_back(nodo);
for(int vecino:graph[nodo]){
dfs(vecino);
}
}
vector<int> beechtree(int n, int m, vector<int>P, vector<int>C){
padre=P;
graph.resize(n,vector<int>());
for(int i=1;i<n;i++){
graph[P[i]].push_back(i);
}
vector<int>ans(n,0);
for(int i=0;i<n;i++){
sub.clear();
dfs(i);
if(sub.size()==1){
ans[i]=1;
continue;
}
sort(perm.begin()+1, perm.end());
do{
bool bien=true;
map<int,int>repeticiones;
for(int j=1;j<sub.size();j++){
if(repeticiones.find(C[sub[j]])==repeticiones.end()){
repeticiones[C[sub[j]]]=0;
}
if(repeticiones[C[sub[j]]]!=P[sub[j]]){
bien=false;
break;
}
repeticiones[C[sub[j]]]++;
}
if(bien){
ans[i]=1;
break;
}
}while(next_permutation(sub.begin()+1,sub.end()));
}
return ans;
}