Submission #1298896

#TimeUsernameProblemLanguageResultExecution timeMemory
1298896kawhietStations (IOI20_stations)C++20
100 / 100
410 ms600 KiB
#include <bits/stdc++.h> #include "stations.h" using namespace std; vector<int> in, out, labels; vector<vector<int>> g; int timer = 0; void dfs(int u, int p, bool f) { in[u] = timer++; for (auto v : g[u]) { if (v != p) { dfs(v, u, !f); } } out[u] = timer++; labels[u] = (f ? in[u] : out[u]); } vector<int> label(int n, int k, vector<int> u, vector<int> v) { g.assign(n, {}); in.assign(n, 0); out.assign(n, 0); labels.assign(n, 0); for (int i = 0; i < n - 1; i++) { g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } dfs(0, -1, 1); auto a = labels; sort(a.begin(), a.end()); for (auto &x : labels) { x = lower_bound(a.begin(), a.end(), x) - a.begin(); } return labels; } int find_next_station(int s, int t, vector<int> c) { if (c[0] > s) { if (t < s) { return c.back(); } if (t > c.back()) { return c.back(); } for (auto x : c) { if (x >= t) { return x; } } } if (t < c[0]) { return c[0]; } if (t > s) { return c[0]; } reverse(c.begin(), c.end()); for (auto x : c) { if (x <= t) { return x; } } return 0; }
#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...