Submission #401666

#TimeUsernameProblemLanguageResultExecution timeMemory
401666dxz05Stations (IOI20_stations)C++14
100 / 100
1140 ms816 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 1011; vector<int> g[MAXN]; int ID[MAXN], tin[MAXN], tout[MAXN], timer = 0; void dfs(int v, int p, int dep){ tin[v] = timer++; for (int u : g[v]){ if (u != p) dfs(u, v, dep + 1); } tout[v] = timer++; ID[v] = (dep & 1 ? tin[v] : tout[v]); } bool line = true, binary = true; vector<int> label(int n, int k, vector<int> U, vector<int> V) { for (int i = 0; i < n; i++) g[i].clear(); timer = 0; for (int i = 0; i < n - 1; i++){ g[U[i]].push_back(V[i]); g[V[i]].push_back(U[i]); } dfs(0, -1, 1); vector<int> labels(n, 0); for (int i = 0; i < n; i++){ ID[i] /= 2; labels[i] = ID[i]; } return labels; } int find_next_station(int s, int t, vector<int> c) { int sz = c.size(); if (sz == 1) return c.back(); if (c.front() > s){ // dep = odd int lf = s, rg = c[sz - 2]; if (lf > t || rg < t) return c.back(); int pos = lower_bound(c.begin(), c.end(), t) - c.begin(); return c[pos]; } else { // dep = even int lf = c[1], rg = s; if (lf > t || rg < t) return c.front(); int pos = upper_bound(c.begin(), c.end(), t) - c.begin() - 1; return c[pos]; } return c[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...