#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)
{
set<int> level1;
int col = -1;
vector<int> res(N, 1);
vector<vector<int>> adj(N);
for (int i = 1; i < N; ++i) {
adj[P[i]].push_back(i);
}
vector<int> ord;
auto dfs = [&](auto& dfs, int v) -> void {
set<int> col;
for (auto& u : adj[v]) {
col.insert(C[u]);
if (v == 0) {
ord.push_back(u);
}
dfs(dfs, u);
}
if (adj[v].size() != col.size()) {
res[v] = 0;
}
};
dfs(dfs, 0);
sort(begin(ord), end(ord));
ord.erase(unique(begin(ord), end(ord)), end(ord));
vector<int> cnt(M + 1);
for (int i : ord) cnt[C[i]] += 1;
// for (int i : ord) {
// cerr << i << " ";
// }
// cerr << "\n";
int need = 1;
for (int i : ord) {
for (int j : adj[i]) {
// cerr << C[j] << " = " << cnt[C[j]] << "\n";
if (cnt[C[j]] != need) {
res[0] = 0;
return res;
}
cnt[C[j]] += 1;
}
if ((int)adj[i].size() > 0) need += 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... |