Submission #1244720

#TimeUsernameProblemLanguageResultExecution timeMemory
1244720qwusha기지국 (IOI20_stations)C++20
10 / 100
313 ms596 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> tin, tout;
int curt = 0;

int K = 5000;

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

vector<int> label(int n, int k, vector<int> v, vector<int> u) {
    vector<int> res(n);
    g.assign(n, {});
    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;
}

bool is_anc(int a, int b) {
    int ai = a / K, ao = a % K, bi = b / K, bo = b % K;
    return (ai <= bi && bo <= ao);
}


int find_next_station(int s, int t, vector<int> c) {
    int p = -1;
    for (auto el : c) {
        if (is_anc(el, s)) {
            p = el;
        }
        if (is_anc(el, t) && 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...