Submission #1000411

#TimeUsernameProblemLanguageResultExecution timeMemory
1000411kunzaZa183Stations (IOI20_stations)C++17
100 / 100
627 ms1052 KiB
#include "stations.h"

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1000;
vector<int> adjlist[maxn];
vector<int> labels;

int ct = 0;
void dfs(int cur, int par, int type) {
  if (type == 0) {  // preorder
    labels[cur] = ct++;
    for (auto a : adjlist[cur])
      if (a != par) dfs(a, cur, 1);
  } else {
    for (auto a : adjlist[cur])
      if (a != par) dfs(a, cur, 0);
    labels[cur] = ct++;
  }
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
  ct = 0;
  labels.clear();
  for (int i = 0; i < n; i++) adjlist[i].clear();
  for (int i = 0; i < n - 1; i++)
    adjlist[u[i]].push_back(v[i]), adjlist[v[i]].push_back(u[i]);
  labels.resize(n);
  dfs(0, 0, 0);
  // for (auto a : labels) cout << a << " ";
  // cout << "\n";
  return labels;
}

int find_next_station(int s, int t, vector<int> c) {
  // for (auto a : c) cout << a << ' ';
  // cout << "\n";
  if (c.size() == 1) return c.front();
  sort(c.begin(), c.end());
  if (s > c.front()) {
    if (t > s || t <= c.front()) return c.front();
    return *(upper_bound(c.begin(), c.end(), t) - 1);
  } else {
    if (t < s || t >= c.back()) return c.back();
    return *lower_bound(c.begin(), c.end(), t);
  }
}
#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...