#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |