제출 #1242406

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