Submission #293557

#TimeUsernameProblemLanguageResultExecution timeMemory
293557DystoriaXSplit the Attractions (IOI19_split)C++14
22 / 100
613 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); for(auto &k : sub){ if(k.first >= v[0].first && n - k.first >= v[1].first){ found = true; Colour(k.second, u, 0); Colour(u, k.second, 1); return; } } } 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...