제출 #1233904

#제출 시각아이디문제언어결과실행 시간메모리
1233904Ghulam_JunaidBeech Tree (IOI23_beechtree)C++20
5 / 100
45 ms20552 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, sz[v]--; } 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){ sort(g[v].begin(), g[v].end(), cmp); for (int u : g[v]){ if (delay[u]) delayed.push_back(u); else label[u] = ++cur_label; } for (int u : g[v]) if (label[u]) rev[label[u]] = u, Label(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); while (!delayed.empty()){ label[delayed.back()] = ++cur_label; rev[label[delayed.back()]] = delayed.back(); delayed.pop_back(); } 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); ans[n - 1] = ans[n - 2] = 1; for (int i = n - 3; i >= 0; i --) ans[i] = (ans[i + 1] and (col[i + 1] == col[i + 2])); return ans; 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...