Submission #926943

#TimeUsernameProblemLanguageResultExecution timeMemory
926943daoquanglinh2007Stations (IOI20_stations)C++17
100 / 100
528 ms1540 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; #define isz(a) (int)(a).size() const int NM = 1000; vector <int> adj[NM+5]; int dep[NM+5]; int timer = 0, tin[NM+5], tout[NM+5]; vector <int> arr; void dfs(int u, int p){ dep[u] = (p == -1 ? 0 : dep[p]+1); tin[u] = ++timer; for (int v : adj[u]){ if (v == p) continue; dfs(v, u); } tout[u] = ++timer; } vector <int> label(int n, int k, vector <int> u, vector <int> v){ for (int i = 0; i < n; i++) adj[i].clear(); for (int i = 0; i < n-1; i++){ adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } dfs(0, -1); arr.clear(); for (int i = 0; i < n; i++){ if (dep[i]&1) arr.push_back(tout[i]); else arr.push_back(tin[i]); } sort(arr.begin(), arr.end()); vector <int> ans(n); for (int i = 0; i < n; i++){ if (dep[i]&1) ans[i] = lower_bound(arr.begin(), arr.end(), tout[i])-arr.begin(); else ans[i] = lower_bound(arr.begin(), arr.end(), tin[i])-arr.begin(); } return ans; } int find_next_station(int s, int t, vector <int> c){ if (s < c.front()){ if (t < s || t > c.back()) return c.back(); return c[lower_bound(c.begin(), c.end(), t)-c.begin()]; } else{ if (t < c.front() || t > s) return c.front(); return c[--upper_bound(c.begin(), c.end(), t)-c.begin()]; } }
#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...