제출 #1241486

#제출 시각아이디문제언어결과실행 시간메모리
1241486mychecksedadBeech Tree (IOI23_beechtree)C++17
0 / 100
9 ms19016 KiB
#include "beechtree.h" #include<bits/stdc++.h> using namespace std; #define vi vector<int> #define pii pair<int,int> #define ff first #define ss second #define all(x) x.begin(),x.end() #define pb push_back const int N = 2e5+100; int s[N], m; vi T[N], S[N], C, par; vector<pii> g[N]; vi res, G[N]; bool check_cover(vi &x, vi &y){ for(int u: y){ int pos = lower_bound(all(x), u) - x.begin(); if(pos < (int)x.size() && x[pos] == u) continue; return false; } return true; } void dfs(int v){ bool ok = true; vi col; s[v] = 1; if(g[v].empty()){ res[v] = 1; S[v].pb(v); return; } int big = -1; for(auto [u, cl]: g[v]){ dfs(u); G[v].pb(cl); col.pb(cl); for(int x: S[u]) S[v].pb(x); if(big == -1 || s[u] > s[big]) big = u; s[v] += s[u]; if(res[u] == 0){ ok = false; } } if(!ok){ res[v] = 0; return; } int sz = col.size(); sort(all(col)); col.erase(unique(all(col)), col.end()); T[v] = col; if((int)col.size() < sz){ res[v] = 0; return; } vector<vi> pt; for(int x: S[v]){ pt.pb(G[x]); } sort(all(pt), [&](const vi &x, const vi &y){ return x.size() > y.size(); }); for(int i = 1; i < pt.size(); ++i){ if(!check_cover(pt[i - 1], pt[i])){ res[v] = 0; return; } } res[v] = 1; } std::vector<int> beechtree(int n, int mm, std::vector<int> P, std::vector<int> CC) { m = mm; par = P; C = CC; for(int i = 0; i < n; ++i) T[i].clear(), g[i].clear(); res.clear(); res.resize(n); for(int i = 1; i < n; ++i) g[P[i]].pb({i, C[i]}); dfs(0); 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...