Submission #1326663

#TimeUsernameProblemLanguageResultExecution timeMemory
1326663AksLolCodingStations (IOI20_stations)C++17
100 / 100
400 ms632 KiB
#include <iostream> #include <vector> #include <algorithm> #include <math.h> #include "stations.h" using namespace std; vector<vector<int>> adj; vector<int> lb; vector<int> de; int ti = 0; vector<int> in; vector<int> out; vector<int> vis; vector<int> eulerTour; void dfs(int st, int d){ de[st] = d; vis[st] = 1; eulerTour.push_back(st); ti++; for(auto i : adj[st]){ if(!vis[i]){ dfs(i, d+1); eulerTour.push_back(st); } } } vector<int> label (int n, int k, vector<int> u, vector<int> v){ ti = 0; adj.assign(n, {}); in.assign(n, -1); out.assign(n, -1); vis.assign(n, 0); eulerTour.clear(); for(int i = 0; i<n-1; i++){ adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } lb.assign(n, -1); de.assign(n, -1); dfs(0, 0); for(int i = 0; i<eulerTour.size(); i++){ if(in[eulerTour[i]] == -1) in[eulerTour[i]] = i; out[eulerTour[i]] = i; } vector<pair<int, int>> com(n, pair<int, int>(-1, -1)); for(int i = 0; i<n; i++){ if(de[i] % 2) com[i] = {out[i], i}; else com[i] = {in[i], i}; } sort(com.begin(), com.end()); for(int i = 0; i<n; i++){ lb[com[i].second] = i; } return lb; } int subtree(int par, int u){ return 0; } int find_next_station(int s, int t, vector<int> c){ int i = -1, o = -1; if(s == 0){ for(int i = 0; i<c.size(); i++){ if(c[i] >= t) return c[i]; } return -1; } if(s > c[0]){ if(c.size() == 1) return c[0]; if(s < t) return c[0]; for(int i = c.size()-1; i>0; i--){ if( c[i] <= t ) return c[i]; } return c[0]; } else{ if(c.size() == 1) return c[0]; if( t < s || c[c.size()-2] < t) return c[c.size()-1]; for(int i = 0; i<c.size()-1; i++){ if(s <= t && t <= c[i]) return c[i]; } return c[c.size()-1]; } return -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...