Submission #1077457

#TimeUsernameProblemLanguageResultExecution timeMemory
1077457juicyStations (IOI20_stations)C++17
0 / 100
630 ms1224 KiB
#include "stations.h" #include <bits/stdc++.h> std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { std::vector<std::vector<int>> g(n); for (int i = 0; i < n - 1; ++i) { g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } std::vector<int> lab(n), tin(n), tout(n); std::function<void(int, int, int)> dfs = [&](int u, int p, int dep) { static int timer = 0; tin[u] = ++timer; for (int v : g[u]) { if (v ^ p) { dfs(v, u, dep + 1); } } lab[u] = dep & 1 ? tout[u] : tin[u]; tout[u] = ++timer; }; dfs(0, 0, 0); std::vector<int> ord(n); iota(ord.begin(), ord.end(), 0); std::sort(ord.begin(), ord.end(), [&](int u, int v) { return lab[u] < lab[v]; }); for (int i = 0; i < n; ++i) { lab[ord[i]] = i; } return lab; } std::array<int, 3> qry(int u, std::vector<int> &c) { if (c.size() == 1) { return {c[0], u, u}; } if (u <= c[0]) { int pr = c.back(); c.pop_back(); return {pr, u, c.back()}; } int pr = c[0]; c.erase(c.begin()); return {pr, c[0], u}; } int find_next_station(int s, int t, std::vector<int> c) { auto [pr, l, r] = qry(s, c); if (l <= t && t <= r) { bool f = pr < s; int lst = -1; for (int x : c) { if (!f && x > t) { assert(~lst); return lst; } if (f && t <= x) { return x; } lst = x; } } return pr; }
#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...