#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
vector<int> res(N);
vector<vector<int>> adj(N);
for (int i = 1; i < N; ++i) {
adj[P[i]].push_back(i);
}
auto dfs = [&](auto& dfs, int i, int p) -> vector<int> {
vector<int> vert;
for (auto& u : adj[i]) {
if (u == p) continue;
for (auto j : dfs(dfs, u, i)) {
vert.push_back(j);
}
}
auto seq = vert;
sort(begin(seq), end(seq));
// cerr << i << " = ";
// for (auto& u : seq) {
// cerr << u << " ";
// }
// cerr << "\n";
do {
vector<int> now = seq;
now.insert(now.begin(), i);
map<int, int> cnt;
bool ok = true;
for (auto& j : seq) {
if (now[cnt[C[j]]] != P[j]) {
ok = false;
break;
}
cnt[C[j]] += 1;
}
if (ok) {
res[i] = 1;
break;
}
} while (next_permutation(begin(seq), end(seq)));
vert.push_back(i);
return vert;
};
dfs(dfs, 0, -1);
return res;
}
# | 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... |