#include "beechtree.h"
#include "bits/stdc++.h"
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define si(a_) (ll)(a_.size())
#define all(a_) a_.begin(),a_.end()
using namespace std;
using ll = int;
using pll = pair<ll,ll>;
const ll maxn = 200005;
ll n,m;
vector<pll> g[maxn];
bool oki[maxn];
vector<int> ans;
ll up[maxn];
ll c[maxn];
ll cnt[maxn];
bool oksub(ll i){
bool oke = 1;
for(pll p : g[i]){
ll j = p.fi,col = p.sc;
if(cnt[col]) oke = 0;
cnt[col] = 1;
}
for(pll p : g[i]){
ll j = p.fi,col = p.sc;
cnt[col] = 0;
}
return oke;
}
vector<ll> v;
std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
n = N,m = M;
for(ll i = 2;i<=n;i++){
ll par = P[i-1]+1;
g[par].pb({i,C[i-1]});
up[i] = par;
c[i] = C[i-1];
}
for(ll i = 1;i<=n;i++) oki[i] = oksub(i);
ans.resize(n);
for(ll i = 0;i<n;i++) ans[i] = 0;
for(ll i = 1;i<=n;i++){
v.clear();
bool oke = oki[i];
for(pll p : g[i]){
ll u = p.fi,col = p.sc;
if(si(g[u])>1){
v.pb(u);
}
if(!oki[u]) oke = 0;
}
if(si(v)>1) oke = 0;
else{
if(si(v)==1){
ll u = v[0];
for(pll p : g[i]){
cnt[p.sc]++;
}
for(pll p : g[u]){
if(cnt[p.sc]==0) oke = 0;
}
for(pll p : g[i]){
cnt[p.sc]--;
}
}
}
ans[i-1] = oke;
}
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... |