#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 7;
int n, m;
vector<int> g[N];
int col[N], ok[N], par[N];
bool check(int u, vector<pair<int, int>> v) {
sort(v.begin(), v.end());
do {
bool ok = 1;
if (v[0].first != u) ok = 0;
vector<int> cnt(m + 1, 0);
for (int i = 1; i < v.size(); ++i) {
int f = cnt[v[i].second];
ok &= v[f].first == par[v[i].first];
cnt[v[i].second]++;
}
if (ok) return true;
} while (next_permutation(v.begin(), v.end()));
return false;
}
vector<pair<int, int>> dfs(int u) {
vector<pair<int, int>> sub;
sub.push_back({u, col[u]});
for (auto v : g[u]) {
vector<pair<int, int>> children = dfs(v);
for (auto x : children) sub.push_back(x);
}
if (check(u, sub)) {
ok[u] = 1;
}
return sub;
}
vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
n = N;
m = M;
for (int i = 0; i < n; ++i) {
par[i] = P[i];
if (i > 0) {
g[P[i]].push_back(i);
}
}
for (int i = 0; i < n; ++i) {
col[i] = C[i];
}
dfs(0);
vector<int> ret(n);
for (int i = 0; i < n; ++i) ret[i] = ok[i];
return ret;
}
# | 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... |