Submission #559050

#TimeUsernameProblemLanguageResultExecution timeMemory
559050Mamedov기지국 (IOI20_stations)C++17
0 / 100
3060 ms2097152 KiB
#include "stations.h"
#include <bits/stdc++.h>

using namespace std;

/*
  Label v with tin[v] for even levels and tout[v] for odd levels.
  This gives us labels of even numbers between [0, 2*n-2].
  We can divide each label by 2, so we get all labels in [0, n-1]

  Note: We can always restore [tin[v], tout[v]] by v and its neighbors' labels.
*/

vector<vector<int>>g;
vector<int>tin, tout;
vector<int>labels;
int timer = 0;

void dfs(int v, int par, int level) {
  tin[v] = timer++;
  for (int to : g[v]) {
    if (to != par) {
      dfs(to, v, level + 1);
    }
  }
  tout[v] = timer++;
  if (level % 2 == 0) {
    labels[v] = tin[v] / 2;
  } else {
    labels[v] = tout[v] / 2;
  }
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
  g.resize(n);
  tin.resize(n);
  tout.resize(n);
  labels.resize(n);
  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);
  vector<bool>seen(n, false);
  for (int i = 0; i < n; ++i) {
    if (labels[i] < 0 || labels[i] >= n || seen[labels[i]]) {
      const int up = 2e9;
      long long sum = 0;
      for (int j = 1; j <= up; ++j) {
        sum += up / j;
      }
    }
    seen[labels[i]] = true;
  }
  return labels;
}

int find_next_station(int s, int t, vector<int> c) {
  if (c[0] > s) {  /// s is labeled with tin[]
    if (t < s) {
      return c.back();
    } else {
      auto itr = lower_bound(c.begin(), c.end(), t);
      if (itr == c.end()) --itr;
      return (*itr);
    }
  } else {  /// s is labeled with tout[]
    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...