제출 #1242407

#제출 시각아이디문제언어결과실행 시간메모리
1242407urosk참나무 (IOI23_beechtree)C++20
0 / 100
49 ms17476 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()
using namespace std;

using ll = int;
using pll = pair<ll,ll>;

const ll maxn = 200005;
ll n,m;
vector<pll> g[maxn];
bool ok[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;
}
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];
    }
    ans.resize(n);
    for(ll i = 0;i<n;i++) ans[i] = 0;
    for(ll i = 2;i<=n;i++){
        if(up[i]!=1&&up[up[i]]==1){
            ans[i-1] = 1;
        }else if(up[i]==1){
            ans[i-1] = oksub(i);
        }
    }
    if(oksub(1)){
        set<ll> s1,s2;
        ans[0] = 1;
        map<ll,ll> mp;
        for(pll p : g[1]){
            ll u = p.fi,col = p.sc;
            if(ans[u-1]==0) ans[0] = 0;
            s1.insert(col);
            for(pll q : g[u]){
                s2.insert(q.sc);
                mp[q.sc]++;
            }
        }
        for(ll x : s2) if(s1.find(x)==s1.end()) ans[0] = 0;
        vector<ll> v;
        for(pll p : g[1]){
            ll u = p.fi;
            ll mx = 0;
            for(pll q : g[u]){
                mx = max(mx,mp[q.sc]);
            }
            v.pb(mx);
        }
        sort(all(v));
        for(ll i = 0;i<si(v);i++){
            if(i+1<v[i]) ans[0] = 0;
        }
    }
    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...