Submission #1234609

#TimeUsernameProblemLanguageResultExecution timeMemory
1234609guanexStations (IOI20_stations)C++20
76 / 100
306 ms600 KiB
#include "stations.h" #include<bits/stdc++.h> using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; #define pb push_back vi tin(1005), tout(1005), depth(1005); #define sz(u) (int(u.size())) int cnt = 0; void dfs(int no, int fat, int dept, vvi &ed){ tin[no] = cnt; depth[no] = dept; cnt++; for(auto e:ed[no]){ if(e == fat)continue; dfs(e, no, dept+1, ed); } cnt++; tout[no] = cnt; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { cnt = 0; tin.assign(1005, 0); tout.assign(1005, 0); depth.assign(1005, 0); vvi ed(n+1); for(int i = 0; i < sz(u); ++i){ ed[u[i]].pb(v[i]); ed[v[i]].pb(u[i]); } dfs(0, -1, 0, ed); vector<pair<int, int>> labels; for(int i = 0; i < n; ++i){ if(depth[i] % 2 == 0){ labels.pb({tin[i], i}); }else{ labels.pb({tout[i], i}); } } sort(labels.begin(), labels.end()); vi ans(n); for(int i = 0; i < n; ++i){ ans[labels[i].second] = labels[i].first; } return ans; } int find_next_station(int s, int t, std::vector<int> c) { sort(c.begin(), c.end()); if(s < c[0]){ // even depth -> tin if(t < s || t >= c[sz(c)-1]){ return c[sz(c)-1]; } int past = s; for(auto e:c){ int ti = past+1; int tou = e; if(t >= ti && t <= tou){ return e; } past = tou; } return c[sz(c)-1]; }else{ // odd depth -> tout if(t > s || t <= c[0]){ return c[0]; } int past = s; reverse(c.begin(), c.end()); for(auto e:c){ int ti = e; int tou = past-1; if(t >= ti && t <= tou){ return e; } past = ti; } return c[sz(c)-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...