Submission #1364938

#TimeUsernameProblemLanguageResultExecution timeMemory
1364938backer8002Stations (IOI20_stations)C++20
69.87 / 100
294 ms616 KiB
#include <bits/stdc++.h>
using namespace std;

static void DFS(int curr, int prev, vector<int> &res, bool maximum, const vector<vector<int> > &edges) {
    static int time = 0;
    if (!maximum)
        res[curr] = time++;

    for (int edge: edges[curr])
        if (edge != prev)
            DFS(edge, curr, res, !maximum, edges);

    if (maximum)
        res[curr] = time++;
}

vector<int> label(int n, int, vector<int> u, vector<int> v) {
    vector<vector<int> > edges(n);
    for (int i = 0; i < n - 1; i++) {
        edges[u[i]].emplace_back(v[i]);
        edges[v[i]].emplace_back(u[i]);
    }
    vector<int> res(n);
    DFS(0, 0, res, false, edges);
    return res;
}

int find_next_station(int s, int t, vector<int> c) {
    if (s < c[0]) {
        if (t >= c.back() || t < s)
            return c.back();
        return *ranges::lower_bound(c, t);
    }
    if (t > s || t <= c[0])
        return c[0];
    return *--ranges::upper_bound(c, t);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...