#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ALL(a) a.begin(), a.end()
vector<int> beechtree(int n, int m, vector<int> p, vector<int> c) {
vector<vector<int>> adj(n);
for (int i=1; i<n; i++) adj[p[i]].pb(i);
vector<int> ans(n), h(n);
auto dfs = [&](auto self, int v) -> vector<int> {
vector<int> sub{v};
for (auto u : adj[v]) {
h[u] = h[v]+1;
auto vec = self(self, u);
for (auto it : vec) sub.pb(it);
}
sort(ALL(sub));
do {
if (sub[0] != v) continue;
bool valid = true;
for (int i=1; i<sub.size(); i++) {
int f=0;
for (int j=1; j<i; j++) f += c[sub[i]]==c[sub[j]];
if (sub[f] != p[sub[i]]) valid = false;
}
int r = sub.size();
while (0 <= r-1 && adj[sub[r-1]].empty()) r--;
for (int i=0; i+1 < r; i++) if (h[sub[i]] > h[sub[i+1]]) valid = false;
for (int i=0; i<r; i++) if (adj[sub[i]].empty()) valid = false;
if (valid) ans[v] = 1;
} while (next_permutation(ALL(sub)));
return sub;
};
dfs(dfs, 0);
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... |