# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
885254 | epicci23 | Stations (IOI20_stations) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "stations.h"
#include "bits/stdc++.h"
using namespace std;
#define pb push_back
typedef long long ll;
vector<int> v[1005];
ll ti=0;
ll ttin[1005],ttout[1005];
void dfs(int c,int p){
ttin[c]=++ti;
for(int x:v[c]){
if(x==p) continue;
dfs(x,c);
}
ttout[c]=ti;
}
vector<int> label(int n, int k,vector<int> u,vector<int> w) {
vector<int> res(n);
for(int i=0;i<n-1;i++){
v[u[i]].pb(w[i]);
v[w[i]].pb(u[i]);
}
dfs(0,0);
for(int i=0;i<n;i++) res[i]=1001*ttout[i]+ttin[i];
return res;
}
ll find_next_station(ll s,ll t,vector<ll> c) {
ll sin,sout,tin,tout;
sin=s%1001;
sout=(s-sin)/1001;
tin=t%1001;
tout=(t-tin)/1001;
ll ust=-1;
for(int x:c){
ll xin,xout;
xin=x%1001;
xout=(x-xin)/1001;
if(xin<=sin && sin<=xout){
ust=x;
continue;
}
if(xin<=tin && tin<=xout) return x;
}
assert(ust!=-1);
return ust;
}