Submission #1244682

#TimeUsernameProblemLanguageResultExecution timeMemory
1244682qwushaStations (IOI20_stations)C++20
10 / 100
316 ms600 KiB

#include "stations.h"

#include <iostream>
#include <bits/stdc++.h>

#define fi first
#define se second

using namespace std;

int inf = 1e9 + 7;

vector<vector<int>> g;
vector<int> par;

vector<int> tin, tout;
int curt = 0;

int K = 10000;

void dfs(int v, int p = -1) {
    tin[v] = curt;
    curt++;
    par[v] = p;
    for (auto u : g[v]) {
        if (u != p) {
            dfs(u, v);
        }
    }
    tout[v] = curt;
    curt++;
}

vector<int> label(int n, int k, vector<int> v, vector<int> u) {
    vector<int> res(n);
    g.assign(n, {});
    par.assign(n , -1);
    tin.assign(n, -1);
    tout.assign(n, -1);
    for (int i = 0; i < n - 1; i++) {
        g[v[i]].push_back(u[i]);
        g[u[i]].push_back(v[i]);
    }
    dfs(0);
    for (int i = 0; i < n; i++) {
        res[i] = tin[i] * K + tout[i];
    }
    return res;
}



int find_next_station(int s, int t, vector<int> c) {
    int tins = s / K, touts = s % K;
    int tint = t / K, toutt = t % K;
    int p = -1;
    for (auto el : c) {
        int tinel = el / K, toutel = el % K;
        if (tinel <= tins && touts <= toutel)
            p = el;
        if (tinel <= tint && toutt <= toutel && p != el) {
            return el;
        }
    }
    return p;
}




#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...