#include "stations.h"
#include<bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
#define pb push_back
vi labels(1005);
#define sz(u) (int(u.size()))
int cnt = 0;
int dfs(int no, int fat, vvi &ed){
	int label = cnt;
	cnt++;
	int subtreesz = 1;
	for(auto e:ed[no]){
		if(e == fat)continue;
		subtreesz += dfs(e, no, ed);
	}
	label *= 1000;
	label += (subtreesz-1);
	labels[no] = label;
	return subtreesz;
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
  cnt = 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, ed);
	vi ans;
	for(int i = 0; i < n; ++i){
		ans.pb(labels[i]);
	}
	return ans;
}
int find_next_station(int s, int t, std::vector<int> c) {
	int source = s / 1000;
	int target = t / 1000;
	int ssize = s % 1000;
	if( (target < source) || (target > (source + (ssize))) ){
		for(auto e:c){
			int node = e/1000;
			if(node < source){
				return e;
			}
		}
		return c[0];
	}else{
		for(auto e:c){
			int node = e / 1000;
			int nodesize = e % 1000;
			if(node < source)continue;
			if(target >= node && target <= (node + nodesize)){
				return e;
			}
		}
		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... |