Submission #293553

#TimeUsernameProblemLanguageResultExecution timeMemory
293553DystoriaXSplit the Attractions (IOI19_split)C++14
0 / 100
623 ms1048580 KiB
#include "split.h" #include <vector> #include <iostream> #include <algorithm> using namespace std; int n; int sz[100010]; vector<int> adj[100010]; vector<pair<int, int> > v; bool found = false; vector<int> res; void Colour(int u, int p, int id){ if(v[id].first == 0) return; res[u] = v[id].second; v[id].first--; for(auto &v : adj[u]){ if(v == p) continue; Colour(v, u, id); } } void dfs(int u, int p) { sz[u] = 1; vector<pair<int, int> > sub; for(auto &v : adj[u]){ if(v == p) continue; dfs(v, u); if(found) return; sz[u] += sz[v]; sub.emplace_back(sz[v], v); } sub.emplace_back(n - sz[u], p); sort(sub.begin(), sub.end()); int id = 0, sk[2]; bool used = false; for(auto &k : sub){ if(k.first >= v[id].first || (id == 0 && k.first + 1 >= v[id].first)){ if(k.first >= v[id].first); else used = true; sk[id++] = k.second; } } if(id == 2) { found = true; Colour(sk[0], u, 0); Colour(sk[1], u, 1); if(used) res[u] = v[0].second; } else { id = 0; used = false; for(auto &k : sub){ if(k.first >= v[id].first || (id == 1 && k.first + 1 >= v[id].first)){ if(k.first >= v[id].first); else used = true; sk[id++] = k.second; } } if(id == 2) { found = true; Colour(sk[0], u, 0); Colour(sk[1], u, 1); if(used) res[u] = v[1].second; } } } vector<int> find_split(int _n, int a, int b, int c, vector<int> p, vector<int> q) { n = _n; v.emplace_back(a, 1); v.emplace_back(b, 2); v.emplace_back(c, 3); sort(v.begin(), v.end()); for(int i = 0; i < (int) p.size(); i++){ adj[p[i]].emplace_back(q[i]); adj[q[i]].emplace_back(p[i]); } res.assign(n, 0); dfs(0, -1); if(found) for(auto &k : res) if(k == 0) k = v[2].second; 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...