/**
* بسم الله الرحمن الرحيم *
﴾ رَبِّ اشْرَحْ لِي صَدْرِي * وَيَسِّرْ لِي أَمْرِي * وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي * يَفْقَهُوا قَوْلِي ﴿
*/
/// author : "ASGA"
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#include"beechtree.h"
int S=0;
int n,m;
vector<int>c,ans,p;
vector<vector<int>>a;
vector<vector<int>>nd;
void calc1(int i){
vector<int>&pp=nd[i];
pp={i};
for(int&j:a[i]){
calc1(j);
for(int&k:nd[j])pp.push_back(k);
}
sort(pp.begin(),pp.end());
do{
vector<int>f(m+1,0);
int vl=1;
for(int i=1;i<pp.size();i++){
vl&=pp[f[c[pp[i]]]]==p[pp[i]];
f[c[pp[i]]]++;
}
if(vl){ans[i]=1;break;}
}
while(next_permutation(pp.begin()+1,pp.end()));
}
vector<int>beechtree(int N,int M,vector<int>P,vector<int>C){
n=N;m=M;c=C;a.resize(n);ans.assign(n,0);p=P;
for(int i=1;i<n;i++)a[p[i]].push_back(i);
S=1;for(int i=1;i<n;i++)S&=p[i]==i-1;
vector<int>f(m+1,0);for(int&i:c)f[i]++;
if(S){
;
}
else if(n<9){
nd.resize(n);
calc1(0);
}
else if(*max_element(f.begin(),f.end())<3){
;
}
else{
;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |