Submission #1214832

#TimeUsernameProblemLanguageResultExecution timeMemory
1214832biank기지국 (IOI20_stations)C++20
100 / 100
312 ms580 KiB
#include <bits/stdc++.h>

using namespace std;

#define sz(x) int(x.size())
#define all(x) begin(x), end(x)

const int MAX_N = 1000;

typedef vector<int> vi;
#define pb push_back

vi adj[MAX_N];
int in[MAX_N], out[MAX_N];
int height[MAX_N], timer = 0;

void dfs(int u, int h = 0, int p = -1) {
    height[u] = h;
    in[u] = timer++;
    for (int v : adj[u]) {
        if (v != p) dfs(v, h + 1, u);
    }
    out[u] = timer++;
}

vi label(int n, int k, vi u, vi v) {
    for (int i = 0; i < n; i++) {
        adj[i].clear();
    }
    for (int i = 0; i < n - 1; i++) {
        adj[u[i]].pb(v[i]);
        adj[v[i]].pb(u[i]);
    }
    dfs(0);
    vi l(n);
    for (int i = 0; i < n; i++) {
        if (height[i] % 2 == 0) {
            l[i] = in[i];
        } else {
            l[i] = out[i];
        }
    }
    vi vals = l;
    sort(all(vals));
    for (int i = 0; i < n; i++) {
        l[i] = int(lower_bound(all(vals), l[i]) - begin(vals));
    }
    return l;
}
int find_next_station(int s, int t, vi c) {
    const int g = sz(c);
    int par = -1;
    vi c_in, c_out;
    if (s < c.back()) {
        par = s == 0 ? -1 : c.back();
        c_out = c;
        c_in.resize(g);
        c_in[0] = s + 1;
        for (int i = 1; i < g; i++) {
            c_in[i] = c_out[i - 1] + 1;
        }
    } else {
        par = c.front();
        c_in = c;
        c_out.resize(g);
        c_out[g - 1] = s - 1;
        for (int i = g - 2; i >= 0; i--) {
            c_out[i] = c_in[i + 1] - 1;
        }
    }
    for (int i = 0; i < g; i++) {
        if (c[i] != par && c_in[i] <= t && t <= c_out[i]) {
            return c[i];
        }
    }
    return par;
}
#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...