#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;
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] = i;
}
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |