Submission #924362

#TimeUsernameProblemLanguageResultExecution timeMemory
924362abcvuitunggioBeech Tree (IOI23_beechtree)C++17
58 / 100
2086 ms513280 KiB
#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); int nl=0; for (int v:ke[u]){ ch[u]=1; dfs2(v); nl+=ch[v]; bad[u]|=bad[v]; } bad[u]|=(nl+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 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...