Submission #1011189

#TimeUsernameProblemLanguageResultExecution timeMemory
1011189lev1106Stations (IOI20_stations)C++17
0 / 100
632 ms684 KiB
#include "stations.h" #include <cstdio> #include <cassert> #include <map> #include <vector> #include <algorithm> #include <iostream> std::vector<int> g[1001]; int tin[1001], tout[1001], tim = -1, bs = 1000; void dfs(int x, int pr) { tin[x] = ++tim; for (auto y : g[x]) if (y != pr) dfs(y, x); tout[x] = tim; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { for (int i = 0; i < n; i++) g[i].clear(), tin[i] = tout[i] = 0; tim = -1; for (int i = 0; i < n - 1; i++) { g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } dfs(0, 0); std::vector<int> ans(n); for (int i = 0; i < n; i++) { ans[i] = tin[i] * bs + tout[i]; //std::cout << ans[i] << " " << tin[i] << " " << tout[i] << "\n"; } return ans; } int find_next_station(int s, int t, std::vector<int> c) { int tins = s / bs, touts = s % bs, tint = t / bs, toutt = t % bs; int st = 0; if (tint <= tins && touts <= toutt) st = 1; if (tins <= tint && toutt <= touts) st = 2; for (auto i : c) { int tinc = i / bs, toutc = i % bs; if (st == 0 && tinc <= tins && touts <= toutc) return i; if (st == 1 && tinc <= tins && touts <= toutc) return i; if (st == 2 && tinc <= tint && toutt <= toutc) return i; } assert(0); return c.back(); }
#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...