Submission #828214

#TimeUsernameProblemLanguageResultExecution timeMemory
828214errayStations (IOI20_stations)C++17
100 / 100
806 ms724 KiB
#include "stations.h"
#include <vector>

#include <bits/stdc++.h>

using namespace std;

#ifdef DEBUG
  #include "/home/eagle/ioi20/d2/debug.h"
#else 
  #define debug(...) void(37)
#endif

std::vector<int> label(int N, int k, std::vector<int> U, std::vector<int> V) {
	vector<vector<int>> g(N);
  for (int i = 0; i < N - 1; ++i) {
    g[U[i]].push_back(V[i]);
    g[V[i]].push_back(U[i]);
  }
  debug(g);
  vector<int> label(N), d(N, -1);
  int t = 0;
  function<void(int)> Dfs = [&](int v) {
    if (d[v] % 2 == 0) {
      label[v] = t++;
    }
    for (auto u : g[v]) {
      if (d[u] == -1) {
        d[u] = d[v] + 1;
        Dfs(u);
      }
    }
    if (d[v] % 2 == 1) { 
      label[v] = t++;
    }
  };
  d[0] = 0;
  Dfs(0);
  return label;
}

int find_next_station(int S, int T, std::vector<int> C) {
  debug(S, T, C);
  if (S >= C.back()) {
    if (T > S || T < C[0]) {
      return C[0];
    }
    return C[int(lower_bound(C.begin(), C.end(), T + 1) - C.begin()) - 1];
  } else {
    if (T < S || T > C.back()) {
      return C.back();
    }
    return C[int(lower_bound(C.begin(), C.end(), T) - C.begin())];
  }
}
#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...