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;
int n,m,bad[200001],cnt[200001],sz[200001],pos[200001],id,mx,ch[200001];
vector <int> p,c,res,T[200001],ke[200001],ve[200001];
void dfs(int u){
sz[u]=1;
for (int v:ke[u]){
dfs(v);
sz[u]+=sz[v];
}
ve[sz[u]].push_back(u);
}
void dfs2(int u){
T[u].push_back(u);
ch[u]=(!ke[u].empty());
for (int v:ke[u]){
dfs2(v);
ch[u]+=ch[v];
bad[u]|=bad[v];
}
bad[u]|=(ch[u]>mx);
if (bad[u])
return;
for (int v:ke[u])
for (int i:T[v])
T[u].push_back(i);
sort(T[u].begin(),T[u].end(),[](int i, int j){return pos[i]<pos[j];});
fill(cnt,cnt+m+1,0);
for (int i:T[u]){
if (i==u)
continue;
if (T[u][cnt[c[i]]]!=p[i]){
bad[u]=1;
break;
}
cnt[c[i]]++;
}
}
vector <int> beechtree(int N, int M, vector<int> P, vector<int> C){
n=N,m=M,p=P,c=C;
for (int i=1;i<n;i++){
ke[P[i]].push_back(i);
cnt[C[i]]++;
mx=max(mx,cnt[C[i]]);
}
dfs(0);
for (int i=n;i>=0;i--){
sort(ve[i].begin(),ve[i].end(),[](int u, int v){return pos[p[u]]<pos[p[v]];});
for (int j:ve[i])
pos[j]=++id;
}
dfs2(0);
for (int i=0;i<n;i++)
res.push_back(bad[i]^1);
return res;
}
# | 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... |