#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> tin(n), tout(n);
auto dfs = [&](auto& dfs, int i, int p, int& t) -> void {
tin[i] = t++;
for (auto& u : adj[i]) {
if (p == u) continue;
dfs(dfs, u, i, t);
}
tout[i] = t;
};
int t = 0;
dfs(dfs, 0, -1, t);
vector<int> rt(n);
for (int i = 0; i < n; ++i) {
rt[i] = tin[i] * 1000 + tout[i];
}
return rt;
}
bool ancestor(int t1, int t2, int tt1, int tt2) {
return t1 <= tt1 && tt2 <= t2;
}
int find_next_station(int s, int t, std::vector<int> c) {
int ent1 = t / 1000;
int ent2 = t % 1000;
for (auto& i : c) {
int t1 = i / 1000;
int t2 = i % 1000;
if (ancestor(ent1, ent2, t1, t2)) {
return i;
}
}
int st1 = s / 1000;
int st2 = s % 1000;
for (auto& i : c) {
int t1 = i / 1000;
int t2 = i % 1000;
if (ancestor(st1, st2, t1, t2)) {
return i;
}
}
assert(false);
return -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... |