Submission #1233979

#TimeUsernameProblemLanguageResultExecution timeMemory
1233979Sir_Ahmed_ImranBeech Tree (IOI23_beechtree)C++17
0 / 100
27 ms5188 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; #define MAXN 2001 #define nl '\n' #define ff first #define ss second #define ll long long #define ld long double #define terminator main #define pll pair<ll,ll> #define add insert #define append push_back #define pii pair<int,int> #define all(x) (x).begin(),(x).end() int sz[MAXN]; int dept[MAXN]; int x[MAXN][MAXN]; int s[MAXN][MAXN]; vector<int> d[MAXN]; vector<int> a[MAXN]; vector<int> beechtree(int n, int m, vector<int> p, vector<int> c){ vector<int> ans(n, 1); vector<pii> vec; int mx = 0; for(int i = 1; i < n; i++){ dept[i] = dept[p[i]] + 1; d[dept[i]].append(i); a[p[i]].append(i); mx = max(mx, dept[i]); } d[0].append(0); bool b; int v, u; for(int h = mx; h >= 0; h--){ for(int i = 0; i < d[h].size(); i++){ v = d[h][i]; vec.clear(); sz[v] = 1; for(auto & j : a[v]){ sz[v] += sz[j]; if(x[v][c[j]]) ans[v] = 0; x[v][c[j]] = j; vec.append({sz[j], j}); } if(!ans[v]) continue; sort(all(vec)); for(int j = 1; j < a[v].size(); j++) if(!s[vec[j].ss][vec[j - 1].ss]) ans[v] = 0; if(!a[v].empty()){ for(auto & j : a[vec.back().ss]) if(!x[v][c[j]]) ans[v] = 0; } if(!ans[v]) continue; for(int j = 0; j < i; j++){ v = d[h][i], u = d[h][j]; if(!ans[u]) continue; if(sz[v] < sz[u]) swap(v, u); s[v][u] = 1; for(auto & k : a[u]){ if(v == 1 && u == 2) if(!s[x[v][c[k]]][k]) s[v][u] = 0; } if(sz[v] == sz[u]) s[u][v] = s[v][u]; } } } return ans; }
#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...