Submission #836571

#TimeUsernameProblemLanguageResultExecution timeMemory
836571NeroZeinStations (IOI20_stations)C++17
16 / 100
715 ms752 KiB
#include "stations.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std; 

const int B =  1000;
 
std::vector<int> label(int n, int k, std::vector<int> eu, std::vector<int> ev) {
  std::vector<int> labels(n, -1);
  vector<vector<int>> g(n); 
  for (int i = 0; i < n - 1; ++i) {
    g[ev[i]].push_back(eu[i]);
    g[eu[i]].push_back(ev[i]); 
  }
  int start = 0;
  for (int i = 1; i < n; ++i) {
    if (g[i].size() > g[start].size()) {
      start = i; 
    }
  }
  function<void(int, int)> Dfs = [&](int v, int p) {
    for (int u : g[v]) {
      if (u == p) continue;
      labels[u] = labels[v] + B; 
      Dfs(u, v); 
    }
  };
  //cout << start << '\n';
  labels[start] = 0; 
  int cnt = 1; 
  for (int i : g[start]) {
    labels[i] = cnt++; 
    Dfs(i, start); 
  }
  //for (int i = 0; i < n; ++i) {
    //cout << labels[i] << ' ';
  //}
  //cout << '\n';
  return labels;
}
 
int find_next_station(int s, int t, std::vector<int> c) {
  //cout << "s, t: " << s << ' ' << t << '\n';
  //cout << "C: "; for (int i : c) cout << i << ' ';cout << '\n';
  if (s > t) {
    for (int i : c) if (i < s) return i;
  } else {
    if (s == 0) {
      return t % B; 
    }
    if ((s - t) % B == 0) {
      return s + B;
    } else {
      for (int i : c) if (i < s) return i;
    }
  }
  assert(false);
}
#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...