Submission #1242550

#TimeUsernameProblemLanguageResultExecution timeMemory
1242550uroskBeech Tree (IOI23_beechtree)C++20
0 / 100
2093 ms27836 KiB
#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()
#define here cerr<<"========================================\n"
#define dbg(X_) cerr<<#X_<<": "<<X_<<endl;
#define ceri(a_,l_,r_) {for(ll i_=l_;i_<=r_;i_++) cerr<<a_[i_]<<" ";cerr<<endl;}
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;
}
ll dub[maxn];
ll rut;
vector<ll> v;
queue<ll> q;
bool oke = 1;
void dfs(ll u,ll col){
    if(rut!=u){
        if(v[cnt[col]]!=up[u]) oke = 0;
        cnt[col]++;
    }
    v.pb(u);
    if(si(g[u])==2){
        if(g[u][1].sc==col) swap(g[u][1],g[u][0]);
    }
    for(pll p : g[u]){
        ll s = p.fi,col2 = p.sc;
        dfs(s,col2);
    }
}
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]-1});
        up[i] = par;
        c[i] = C[i-1]-1;
    }
    ans.resize(n);
    for(ll i = 0;i<n;i++) ans[i] = 0;
    for(ll i = 1;i<=n;i++){
        rut = i;
        v.clear();
        oke = 1;
        cnt[0] = cnt[1] = 0;
        dfs(i,0);
        if(oke) ans[i-1] = 1;
        cnt[0] = cnt[1] = 0;
        v.clear();
        oke = 1;
        dfs(i,1);
        if(oke) ans[i-1] = 1;
    }
    return ans;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...