#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 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... |