#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph;
vector<int> sbsize;
vector<int> labels;
void dfs1(int a, int p){
for (auto go : graph[a]){
if (go == p)
continue;
dfs1(go, a);
sbsize[a] += sbsize[go];
}
}
void dfs(int a, int p){
int j = labels[a];
for (auto go : graph[a]){
if (go == p)
continue;
if (labels[p] >= labels[a]){
j += sbsize[go];
labels[go] = j;
}else{
j -= sbsize[go];
labels[go] = j;
}
dfs(go, a);
}
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
labels.resize(n);
sbsize.resize(n, 1);
graph.resize(n);
for (int i = 0; i < n - 1; i++){
graph[u[i]].push_back(v[i]);
graph[v[i]].push_back(u[i]);
}
dfs1(0, 0);
dfs(0, 0);
return labels;
}
int find_next_station(int s, int t, std::vector<int> c) {
if (s < c[0]){
if (t < s || t >= c[c.size() - 1]){
return c[c.size() - 1];
}
int tmp = c[c.size() - 1];
for (auto k : c){
if (t <= k){
tmp = min(tmp, k);
}
}
return tmp;
}else{
if (t > s || t <= c[0]){
return c[0];
}
int tmp = c[0];
for (auto k : c){
if (t >= k){
tmp = max(tmp, k);
}
}
return tmp;
}
return c[0];
}
# | 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... |