Submission #923360

#TimeUsernameProblemLanguageResultExecution timeMemory
923360abcvuitunggioBeech Tree (IOI23_beechtree)C++17
58 / 100
2069 ms520280 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; int n,m,bad[200001],cnt[200001],sz[200001],pos[200001],id; 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); for (int v:ke[u]){ dfs2(v); if (bad[v]) bad[u]=1; } 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); 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 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...