Submission #1233981

#TimeUsernameProblemLanguageResultExecution timeMemory
1233981Ghulam_JunaidBeech Tree (IOI23_beechtree)C++20
0 / 100
2097 ms68320 KiB
#include <bits/stdc++.h> #include "beechtree.h" // #include "grader.cpp" using namespace std; const int N = 2e5 + 10; int n, m, h[N], sz[N], label[N], delay[N], rev[N], cur_label; vector<int> par, col, ans, g[N]; map<int, int> cnt_lvl[N]; void dfs(int v){ bool last_level = 1; int cnt_ch = 0; for (int u : g[v]){ h[u] = h[v] + 1; dfs(u); cnt_lvl[h[v]][col[u]]++; last_level &= g[u].empty(); cnt_ch += (col[u] == col[v]); } sz[v] = g[v].size(); for (int u : g[v]) if (g[u].empty() and cnt_lvl[h[u]].find(col[u]) == cnt_lvl[h[u]].end() and !last_level) delay[u] = 1; } vector<int> delayed; bool cmp(int u, int v){ return (sz[u] > sz[v] or (sz[u] == sz[v] and u < v)); } void Label(int v){ for (int u = 0; u < n; u ++) sort(g[u].begin(), g[u].end(), cmp); queue<int> q; q.push(v); while (!q.empty()){ int v = q.front(); q.pop(); if (delay[v]){ delayed.push_back(v); continue; } label[v] = cur_label++; rev[label[v]] = v; for (int u : g[v]) q.push(u); } } void solve(int v){ for (int i = 0; i <= n; i ++) cnt_lvl[i].clear(), h[i] = sz[i] = delay[i] = label[i] = rev[i] = 0; h[v] = 0; dfs(v); delayed.clear(); label[v] = cur_label = 0; rev[label[v]] = v; Label(v); for (int x : delayed){ label[x] = cur_label++; rev[label[x]] = x; } delayed.clear(); map<int, int> cnt; ans[v] = 1; for (int i = 1; i < cur_label; i ++){ int u = rev[i]; ans[v] &= (par[u] == rev[cnt[col[u]]]); cnt[col[u]]++; } } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C){ n = N, m = M, par = P, col = C; ans.resize(n); for (int i = 1; i < n; i ++) g[par[i]].push_back(i); for (int i = 0; i < n; i ++) solve(i); 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...