Submission #1025956

#TimeUsernameProblemLanguageResultExecution timeMemory
1025956GrayBeech Tree (IOI23_beechtree)C++17
0 / 100
80 ms28788 KiB
#include "beechtree.h" #include <algorithm> #include <iostream> #include <map> #define ll long long #define ff first #define ss second #define ln "\n" #define pll pair<ll, ll> using namespace std; vector<vector<ll>> A; vector<int> col; vector<int> lev; ll n, m; void dfs(ll u){ lev[u]=1; for (auto v:A[u]){ dfs(v); lev[u]=max(lev[v]+1, lev[u]); } } std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C) { n=N; m=M; A.resize(n); lev.resize(n); col=C; for (ll i=1; i<n; i++){ A[P[i]].push_back(i); } dfs(0); vector<int> pos(n, 1); for (ll i=0; i<n; i++){ if(lev[i]==1) pos[i]=1; else if (lev[i]==2){ map<ll, ll> colus; for (auto v:A[i]) { if (colus[col[v]]) {pos[i]=0; break;} colus[col[v]]++; } }else{ map<ll, ll> colus; for (auto v:A[i]) { if (colus[col[v]]) {pos[i]=0; break;} colus[col[v]]++; } if (!pos[i]) continue; for (auto v:A[i]){ if (A[v].size()){ map<ll, ll> icolus; for (auto u:A[v]){ icolus[col[u]]++; if (icolus[col[u]]>1) {pos[i]=0; break;} if (!colus[col[u]]) {pos[i]=0; break;} } } } } } return pos; }
#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...