Submission #924363

#TimeUsernameProblemLanguageResultExecution timeMemory
924363abcvuitunggioBeech Tree (IOI23_beechtree)C++17
58 / 100
2114 ms530820 KiB
#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
int n,m,bad[200001],cnt[200001],sz[200001],pos[200001],id,mx,ch[200001];
vector <int> p,c,res,T[200001],ke[200001],ve[200001];
void dfs(int u){
    sz[u]=1;
    for (int v:ke[u]){
        dfs(v);
        sz[u]+=sz[v];
    }
    ve[sz[u]].push_back(u);
}
void dfs2(int u){
    T[u].push_back(u);
    ch[u]=(!ke[u].empty());
    for (int v:ke[u]){
        dfs2(v);
        ch[u]+=ch[v];
        bad[u]|=bad[v];
    }
    bad[u]|=(ch[u]>mx);
    if (bad[u])
        return;
    for (int v:ke[u])
        for (int i:T[v])
            T[u].push_back(i);
    sort(T[u].begin(),T[u].end(),[](int i, int j){return pos[i]<pos[j];});
    fill(cnt,cnt+m+1,0);
    for (int i:T[u]){
        if (i==u)
            continue;
        if (T[u][cnt[c[i]]]!=p[i]){
            bad[u]=1;
            break;
        }
        cnt[c[i]]++;
    }
}
vector <int> beechtree(int N, int M, vector<int> P, vector<int> C){
    n=N,m=M,p=P,c=C;
    for (int i=1;i<n;i++){
        ke[P[i]].push_back(i);
        cnt[C[i]]++;
        mx=max(mx,cnt[C[i]]);
    }
    dfs(0);
    for (int i=n;i>=0;i--){
        sort(ve[i].begin(),ve[i].end(),[](int u, int v){return pos[p[u]]<pos[p[v]];});
        for (int j:ve[i])
            pos[j]=++id;
    }
    dfs2(0);
    for (int i=0;i<n;i++)
        res.push_back(bad[i]^1);
    return res;
}
#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...