#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> label(int n, int k, std::vector<int> U, std::vector<int> V) {
vector<vector<int>> adj(n);
for (int i = 0; i < (int)U.size(); ++i) {
adj[U[i]].push_back(V[i]);
adj[V[i]].push_back(U[i]);
}
vector<int> rt(n);
vector<int> sz(n);
auto get_size = [&](auto& get_size, int v, int p) -> void {
sz[v] = 1;
for (auto& u : adj[v]) {
if (u == p) continue;;
get_size(get_size, u, v);
sz[u] += sz[v];
}
};
get_size(get_size,0, -1);
auto dfs = [&](auto& dfs, int i, int p, int d, int tl, int tr) -> void {
if (d % 2) {
rt[i] = tr--;
} else {
rt[i] = tl++;
}
for (auto& u : adj[i]) {
if (p == u) continue;
dfs(dfs, u, i, d + 1, tl, tl + sz[u] - 1);
}
};
int tl = 0, tr = n - 1;
dfs(dfs, 0, -1, 0, 0, sz[0] - 1);
return rt;
}
int find_next_station(int s, int t, std::vector<int> c) {
if (c.size() == 1) return c[0];
int n = c.size();
if (s > c[0]) { // black
if (s < t || c[1] > t) return c[0];
auto it = --upper_bound(begin(c), end(c), t);
return *it;
} else { // white
int right = 0;
if (s != 0) right = c[n - 2];
else right = c[n - 1];
if (s > t || right < t) return c[n - 1];
auto it = lower_bound(begin(c), end(c), t);
return *it;
}
}
# | 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... |