Submission #1069082

#TimeUsernameProblemLanguageResultExecution timeMemory
1069082bleahbleahBeech Tree (IOI23_beechtree)C++17
0 / 100
85 ms74832 KiB
#include "beechtree.h" #include <bits/stdc++.h> #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; using ld = long double; //#define int ll #define sz(x) ((int)(x).size()) using pii = pair<int,int>; using tii = tuple<int,int,int>; const int nmax = 1e5 + 5; vector<pii> g[nmax]; vector<int> P, C; unordered_set<int> colors[nmax], play[nmax]; bool isanc(unordered_set<int>& A, unordered_set<int>& B) { if(sz(A) < sz(B)) return 0; for(auto &x : B) if(!A.count(x)) return 0; return 1; } vector<int> sol; int h[nmax]; vector<int> dfs(int node) { cerr << node << '\n'; vector<int> here; sol[node] = 1; h[node] = 0; for(auto [x, e] : g[node]) { auto T = dfs(x); //cerr << x << ": " << sol[x] << '\n'; sol[node] &= sol[x]; copy(all(T), back_inserter(here)); h[node] = max(h[node], h[x] + 1); } here.emplace_back(node); if(sol[node] == 0 || sz(g[node]) != sz(colors[node])) { sol[node] = 0; return here; } vector<vector<int>> ts(h[node] + 1); for(auto x : here) ts[h[x]].emplace_back(x); for(auto x : here) play[x] = colors[x]; for(int i = 0; i < h[node]; i++) { //if(node == 0) { //cerr << "niveaux " << i << '\n'; //} for(auto x : here) { if(x == node) continue; if(h[x] < i) continue; //if(node == 0) { //cerr << x << '\n'; //for(auto x : play) //} if(!isanc(play[P[x]], play[x])) { sol[node] = 0; return here; } } for(auto a : ts[i]) { if(a == node) continue; play[P[a]].erase(C[a]); } } return here; } std::vector<int> beechtree(int N, int M, std::vector<int> P_, std::vector<int> C_) { P = P_; C = C_; for(int i = 1; i < N; i++) { g[P[i]].emplace_back(i, C[i]); colors[P[i]].emplace(C[i]); } sol.assign(N, 0); dfs(0); return sol; } /** Töte es durch genaue Untersuchung\Töte es kann es nur noch schlimmer machen\Es lässt es irgendwie atmen -- */
#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...