# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1168830 | aycnl | Stations (IOI20_stations) | C++20 | 0 ms | 0 KiB |
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
#define ii pair <int, int>
#define ff first
#define ss second
#define bit(i) (1 << (i))
#define fto(i, a, b) for (int i = (a); i <= (b); ++i)
#define fdto(i, a, b) for (int i = (a); i >= (b); --i)
#define flto(i, a, b) for (int i = (a); (1 << i) <= (b); ++i)
#define pb push_back
#define pf push_front
#define endl "\n"
#define oo (int)(998244353)
#define maxN 1005
#define l(s) s.length()
#define vi vector <int>
#define vii vector <ii>
#define fat(x, y) for (auto x : y)
#define fit(x, y) for (int x : y)
#define fiit(x, y) for (ii x : y)
#define EPS 1e-9
#define pi (acos(-1))
#define ll long long
int tme;
vi ke[maxN];
int pos[maxN], en[maxN], h[maxN];
void dfs(int u, int par) {
pos[u] = tme++;
for (int v : ke[u]) if (v != par) {
h[v] = h[u] + 1;
dfs(v, u);
}
en[u] = (tme - 1);
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
tme = 0;
fto(i, 0, n-1) ke[i].clear();
fto(i, 0, n-2) {
ke[u[i]].pb(v[i]);
ke[v[i]].pb(u[i]);
}
dfs(0, -1);
vii tmp;
fto(i, 0, n-1) {
if (h[i]%2 == 0) {
tmp.pb({pos[i], -i})
} else {
tmp.pb({en[i], i});
}
}
sort(tmp.begin(), tmp.end());
vi res(n, 0);
fto(i, 0, n-1) res[abs(tmp[i].ss)] = i;
//fto(i, 0, n-1) cout << res[i] << " "; cout << endl;
return res;
}
int find_next_station(int s, int t, std::vector<int> c) {
int sz = int(c.size());
if (sz == 1) return c[0];
if (s == 0) {
fto(i, 0, sz - 1) if (c[i] >= t) return c[i];
return c[0];
}
if (s < c[0]) {
if (t >= c[sz-1] || t < s) return c[sz-1];
fto(i, 0, sz-1) if (c[i] >= t) return c[i];
} else {
if (t > s || t <= c[0]) return c[0];
fdto(i, sz-1, 0) if (c[i] <= t) return c[i];
}
return c[0];
}