Submission #308615

#TimeUsernameProblemLanguageResultExecution timeMemory
308615xt0r3Stations (IOI20_stations)C++14
0 / 100
973 ms640 KiB
#include<bits/stdc++.h> #include "stations.h" using namespace std; constexpr int N = 4005; int timer; vector<int> l, d; vector<bool> visited; vector<vector<int> > edges; void dfs(int id){ visited[id] = 1; d[id] = timer++; for(int v : edges[id]){ if(!visited[v]) dfs(v); } l[id] = timer++; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v){ edges.resize(n, vector<int>()); visited.resize(n, 0); l.resize(n); d.resize(n); vector<int> ll(n); for(int i = 0; i < n; i++){ edges[u[i]].push_back(v[i]); edges[v[i]].push_back(u[i]); } dfs(0); for(int i = 0; i < n; i++){ ll[i] = N * d[i] + l[i]; } edges.clear(); visited.clear(); l.clear(); d.clear(); timer = 0; return ll; } int find_next_station(int s, int t, std::vector<int> c){ int ti = t / N, tl = t % N; vector<int> v; v.reserve(c.size()); for(int x : c){ int ci = x / N, cl = x % N; v.push_back(ci); if(ci <= ti && tl <= cl) return x; } int dex = min_element(v.begin(), v.end()) - v.begin(); return c[dex]; } /* int main(){ vector<int> v(9), u(9); v[1] = 9; iota(v.begin(), v.end(), 0); fill(u.begin(), u.begin() + 5, 1); fill(u.begin() + 5, u.begin() + 9, 0); vector<int> c = label(10, 1000000, u, v); vector<int> ad; for(int x : edges[0]) ad.push_back(c[x]); int x = find_next_station(c[0], c[9], ad); cout << (int)(find(c.begin(), c.end(), x) - c.begin()) << endl; } */
#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...