#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
vector<int> ret(N);
vector<vector<int>> child(N);
for (int i = 1; i < N; i++) child[P[i]].push_back(i);
vector<int> maxdeg(N), subsz(N);
vector<vector<int>> have(N, vector<int>(2, 0));
for (int i = N-1; i >= 0; i--) {
ret[i] = true;
subsz[i] = 1;
for (int v : child[i]) {
maxdeg[i] = max(maxdeg[i], maxdeg[v]);
have[i][0] += have[v][0];
have[i][1] += have[v][1];
subsz[i] += subsz[v];
}
if (maxdeg[i] >= 2 || child[i].size() > 2) ret[i] = false;
maxdeg[i] = max(maxdeg[i], (int)child[i].size());
if (child[i].size() == 2 && subsz[child[i][0]] >= 2 && subsz[child[i][1]] >= 2) {
ret[i] = false;
}
if (child[i].size() == 2 && have[child[i][0]][0] > 0 && have[child[i][1]][0] > 0 && !(subsz[child[i][0]] == 1 && subsz[child[i][1]] == 1)) {
ret[i] = false;
}
if (child[i].size() == 2 && have[child[i][0]][1] > 0 && have[child[i][1]][1] > 0 && !(subsz[child[i][0]] == 1 && subsz[child[i][1]] == 1)) {
ret[i] = false;
}
for (int v : child[i]) {
if (have[v][0] > 0 && have[v][1] > 0) ret[i] = false;
}
if (i != 0) have[i][C[i]-1]++;
}
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... |