#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 2001
#define nl '\n'
#define ff first
#define ss second
#define ll long long
#define ld long double
#define terminator main
#define pll pair<ll,ll>
#define add insert
#define append push_back
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()
int sz[MAXN];
int dept[MAXN];
int x[MAXN][MAXN];
int s[MAXN][MAXN];
vector<int> d[MAXN];
vector<int> a[MAXN];
vector<int> beechtree(int n, int m, vector<int> p, vector<int> c){
vector<int> ans(n, 1);
vector<pii> vec;
int mx = 0;
for(int i = 1; i < n; i++){
dept[i] = dept[p[i]] + 1;
d[dept[i]].append(i);
a[p[i]].append(i);
mx = max(mx, dept[i]);
}
d[0].append(0);
bool b;
int v, u;
for(int h = mx; h >= 0; h--){
for(int i = 0; i < d[h].size(); i++){
v = d[h][i];
vec.clear();
sz[v] = 1;
for(auto & j : a[v]){
sz[v] += sz[j];
if(x[v][c[j]]) ans[v] = 0;
x[v][c[j]] = j;
vec.append({sz[j], j});
}
if(!ans[v]) continue;
sort(all(vec));
for(int j = 1; j < a[v].size(); j++)
if(!s[vec[j].ss][vec[j - 1].ss])
ans[v] = 0;
if(!a[v].empty()){
for(auto & j : a[vec.back().ss])
if(!x[v][c[j]]) ans[v] = 0;
}
if(!ans[v]) continue;
for(int j = 0; j < i; j++){
v = d[h][i], u = d[h][j];
if(!ans[u]) continue;
if(sz[v] < sz[u])
swap(v, u);
s[v][u] = 1;
for(auto & k : a[u]){
if(v == 1 && u == 2)
if(!s[x[v][c[k]]][k])
s[v][u] = 0;
}
if(sz[v] == sz[u])
s[u][v] = s[v][u];
}
}
}
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... |