Submission #1337474

#TimeUsernameProblemLanguageResultExecution timeMemory
1337474DeltaStructStations (IOI20_stations)C++20
100 / 100
404 ms552 KiB
#include <bits/stdc++.h>
using namespace std;
#include "stations.h"

vector<int> label(int n,int m,vector<int> U,vector<int> V){
  vector<vector<int>> G(n);
  for (int i(0);i < n-1;++i) G[U[i]].emplace_back(V[i]),G[V[i]].emplace_back(U[i]);
  vector<int> R(n),mode(n);
  int t(1);
  auto dfs = [&](auto& dfs,int x,int p) -> void {
    mode[x] = !mode[p];
    if (mode[p]) R[x] = t++;
    for (int y:G[x]) if (y!=p) dfs(dfs,y,x);
    if (mode[x]) R[x] = t++;
  };
  for (int i:G[0]) dfs(dfs,i,0);
  return R;
}

int find_next_station(int s,int g,vector<int> A){
  if (s==0) return *lower_bound(A.begin(),A.end(),g);
  if (A.size()==1) return A[0];
  if (A.size()==2){
    if (A[0]<s) return A[(A[1]<=g&&g<=s)];
    return A[(g<s||A[0]<g)];
  }
  if (A[0]>s){
    if (s<=g&&g<=A.end()[-2]) return *lower_bound(A.begin(),A.end(),g);
    return A.back();
  }
  if (A[1]<=g&&g<=s) return *prev(upper_bound(A.begin(),A.end(),g));
  return A[0];
}
#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...