| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1298638 | lukaye_19 | Stations (IOI20_stations) | C++20 | 0 ms | 0 KiB |
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
int t = 0;
vector<vector<int>>adj;
vector<int>labels;
void DFS(int node,int parent,int odd)
{
if (odd) labels[node] = t++;
for (int child : adj[node]) {
if (child != parent) DFS(child,node,1 - odd);
}
if (!odd) labels[node] = t++;
}
vector<int> label(int n, int k, vector<int> u, vector<int> v)
{
adj.assign(n,{});
labels.assign(n,0);
for (int i = 0; i < n - 1; i++)
{
int u1 = u[i] - 1;
int v1 = v[i] - 1;
adj[v1].push_back(u1);
adj[u1].push_back(v1);
}
t = 0;
DFS(0,-1,1);
return labels;
}
int find_next_station(int s,int ta,vector<int> c)
{
sort(c.begin(),c.end());
if (s < c[0]) {
if (ta <= s) return c[c.size() - 1];
for (int i = 0; i < c.size(); i++)
{
if (ta <= c[i]) return c[i];
}
return c[n - 1];
}
else
{
if (ta >= s) return c[0];
for (int i = c.size() - 1; i >= 0; i--)
{
if (ta >= c[i]) return c[i];
}
return c[0];
}
}
