Submission #1149548

#TimeUsernameProblemLanguageResultExecution timeMemory
1149548FaresSTHStations (IOI20_stations)C++20
0 / 100
2 ms556 KiB
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7, inf = 9e18;
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define mp make_pair
#define S second
#define F first
int dt[1000], ft[1000], lvl[1000], td, tf;
vector<int> adj[1000];

void dfs(int i, int d) {
    lvl[i] = d;
    dt[i] = td++;
    for (int j : adj[i]) {
        if (lvl[j]) continue;
        dfs(j, d + 1);
    }
    ft[i] = tf++;
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
    for (int i = 0; i < n - 1; i++) {
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    dfs(0, 1); vector<int> res;

    for (int i = 0; i < n; i++) {
        if (lvl[i] & 1) res.push_back(dt[i]);
        else res.push_back(ft[i]);
        adj[i].clear();
        lvl[i] = 0;
        dt[i] = 0;
        ft[i] = 0;
    }
    td = 0; tf = 0;
    return res;
}

int find_next_station(int s, int t, vector<int> c) {
    if (s > c[0]) {
        for (int i = 1; i < len(c) - 1; i++) {
            if (c[i] <= t && t < c[i + 1]) return c[i];
        }
        if (c.back() <= t && t < c[0]) return c.back();
        return c[0];
    }
    else {
        for (int i = 1; i < len(c) - 1; i++) {
            if (c[i - 1] < t && t <= c[i]) return c[i];
        }
        if (c[0] < t && t <= c.back()) return c[0];
        return c.back();
    }
}
#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...