Submission #559064

#TimeUsernameProblemLanguageResultExecution timeMemory
559064MamedovStations (IOI20_stations)C++17
100 / 100
856 ms840 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

void dfs(int v, int par, int level, int &timer, vector<int> &labels, vector<vector<int>> &g) {
  if (level % 2 == 0) labels[v] = timer++;
  for (int to : g[v]) {
    if (to != par) {
      dfs(to, v, level + 1, timer, labels, g);
    }
  }
  if (level % 2 != 0) labels[v] = timer++;
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
  vector<vector<int>>g(n);
  vector<int>labels(n);
  int timer = 0;
  for (int i = 0; i < n - 1; ++i) {
    g[u[i]].emplace_back(v[i]);
    g[v[i]].emplace_back(u[i]);
  }
  dfs(0, 0, 0, timer, labels, g);
  return labels;
}

int find_next_station(int s, int t, vector<int> c) {
  if (c[0] > s) {
    if (t < s) {
      return c.back();
    } else {
      auto itr = lower_bound(c.begin(), c.end(), t);
      if (itr == c.end()) --itr;
      return (*itr);
    }
  } else {
    if (t > s) {
      return c[0];
    } else {
      auto itr = upper_bound(c.begin(), c.end(), t);
      if (itr != c.begin()) --itr;
      return (*itr);
    }
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...