Submission #1025934

#TimeUsernameProblemLanguageResultExecution timeMemory
1025934GrayBeech Tree (IOI23_beechtree)C++17
8 / 100
84 ms28500 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]>3) pos[i]=0; else 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; ll cnt=0; for (auto v:A[i]){ if (A[v].size()){ cnt++; for (auto u:A[v]){ if (!colus[col[u]]) {pos[i]=0; break;} } } } // cout << "H" << pos[i] << ln; if (cnt>1) pos[i]=0; } } 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...