Submission #1071071

#TimeUsernameProblemLanguageResultExecution timeMemory
1071071Muhammad_AneeqBeech Tree (IOI23_beechtree)C++17
0 / 100
1 ms7516 KiB
#include <vector> #include <algorithm> #include <set> #include <iostream> using namespace std; int const MAXN=2e5+10; vector<int>nei[MAXN]={}; int c[MAXN]={}; int h[MAXN]={}; int ans[MAXN]={}; int ind[MAXN]={}; int cnt[MAXN]={}; int p[MAXN]={}; bool check(vector<int>d,int u) { for (auto i:d) ind[i]=-1,cnt[c[i]]=0; int z=1; for (auto i:d) { if (ind[p[i]]==-1) return 0; if (cnt[c[i]]!=ind[p[i]]) return 0; ind[i]=z++; cnt[c[i]]++; } return 1; } vector<int> dfs(int u) { vector<int>d; for (auto i:nei[u]) { h[i]=h[u]+1; vector<int>f=dfs(i); for (auto i:f) d.push_back(i); } sort(begin(d),end(d)); while (!check(d,u)) { if (!next_permutation(begin(d),end(d))) { ans[u]=0; break; } } return d; } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) { for (int i=0;i<N;i++) c[i]=C[i],p[i]=P[i],ans[i]=1; for (int i=1;i<N;i++) nei[P[i]].push_back(i); dfs(0); vector<int>d; for (int i=0;i<N;i++) d.push_back(ans[i]); return d; }
#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...