Submission #309360

#TimeUsernameProblemLanguageResultExecution timeMemory
309360xt0r3Stations (IOI20_stations)C++14
100 / 100
1188 ms1104 KiB
#include<bits/stdc++.h> using namespace std; int timer; vector<bool> f; vector<int> l, d; vector<vector<int> > g; void dfs(int id, bool flag = 1){ d[id] = timer++; f[id] = flag; for(int v : g[id]) if(d[v] == -1) dfs(v, !flag); l[id] = timer++; } vector<int> label(int n, int k, vector<int> u, vector<int> v){ f.resize(n); l.assign(n, -1); d.assign(n, -1); g.assign(n, {}); for(int i = 0; i < n - 1; i++){ g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } timer = 0; dfs(0); vector<int> ret(n); for(int i = 0; i < n; i++){ ret[i] = (f[i] ? d[i] / 2 : l[i] / 2); } return ret; } int find_next_station(int s, int t, vector<int> c){ if(s < c[0]){ //c has leaving times if(t < s || t > c.back()) return c.back(); return c[(int)(lower_bound(c.begin(), c.end(), t) - c.begin())]; } else{ //c has discovery times if(t < c.front() || t > s) return c.front(); return c[(int)(upper_bound(c.begin(), c.end(), t) - c.begin()) - 1]; } }
#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...