제출 #772648

#제출 시각아이디문제언어결과실행 시간메모리
772648cadmiumsky기지국 (IOI20_stations)C++17
100 / 100
811 ms876 KiB
#include <bits/stdc++.h>
#define all(x) (x).begin(),(x).end()
using namespace std;

using ll = long long;
using ld = long double;

//#define int ll
#define sz(x) ((int)(x).size())

using pii = pair<int,int>;
using tii = tuple<int,int,int>;

const int nmax = 1e3 + 5;

vector<int> g[nmax];
int pin[nmax], pout[nmax], d[nmax];

int p = 0;
void dfs(int node, int f) {
  pin[node] = p++;
  d[node] = d[f] ^ 1;
  //cerr << node << ' ' << f << '\n';
  for(auto x : g[node])
    if(x != f) dfs(x, node);
  pout[node] = p++;
}

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
  for(int i = 0; i < n; i++) g[i].clear();
  p = 0;
  for(int i = 0; i < sz(u); i++)
    g[u[i]].emplace_back(v[i]),
    g[v[i]].emplace_back(u[i]);
  dfs(0, 0);
  vector<int> rez(n);
  for(int i = 0; i < n; i++)
    rez[i] = (d[i]? pin[i] : pout[i]);
  map<int, int> freq;
  int cnt = 0;
  for(auto x : rez) freq[x];
  for(auto &[a, b] : freq) b = cnt++;
  for(auto &x : rez) x = freq[x];
  //for(int i = 0; i < n; i++) cerr << i << " --> " << rez[i] << '\n';
    
  return rez;
}
int find_next_station(int s, int t, std::vector<int> c) {
  if(sz(c) == 1) return c[0];
  if(s < c[0]) {
    //cerr << s << " --> " << t << '\n';
    //for(auto x : c) cerr << x << ' ';
    //cerr << '\n';
    if(t < s || rbegin(c)[1] < t) return c.back();
    for(int i = 0; i < sz(c); i++)
      if(t <= c[i]) return c[i];
    //assert(true == false);
  }
  else {
    if(t > s || t < c[1]) return c[0];
    int n = sz(c);
    c.emplace_back(s);
    for(int i = 1; i < n; i++) {
      if(c[i] <= t && t < c[i + 1]) return c[i];
    }
    //cerr << s << ' ' << t << '\n';
    //c.pop_back();
    //for(auto x : c) cerr << x << ' ';
    //cerr << '\n';
    //assert(true == false);
  }
  assert(false);
}

/**
      Anul asta se da centroid.
-- Surse oficiale
*/

#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...