제출 #1242423

#제출 시각아이디문제언어결과실행 시간메모리
1242423uroskBeech Tree (IOI23_beechtree)C++20
0 / 100
50 ms18500 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 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])>0){ 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 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...