Submission #424359

#TimeUsernameProblemLanguageResultExecution timeMemory
424359OttoTheDinoStations (IOI20_stations)C++17
100 / 100
1140 ms928 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
#define rep(i,s,e)                          for (int i = s; i <= e; ++i)
#define pb                                  push_back
typedef vector<int> vi;

const int mxn = 2e3;
int id, res[mxn];
vi neibs[mxn];

void dfs (int u, int prev, int d) {
    if (d%2) res[u]=id++;
    for (int v : neibs[u]) {
        if (v==prev) continue;
        dfs (v, u, d+1);
    }
    if (d%2==0) res[u]=id++;
}

vi label (int n, int k, vi u, vi v) {
    rep (i,0,n-2) {
        neibs[u[i]].pb(v[i]);
        neibs[v[i]].pb(u[i]);
    }
    dfs (0,-1,1);
    vi L(n);
    rep (i,0,n-1) L[i] = res[i];

    rep (i,0,n-1) neibs[i].clear();
    id = 0;

    return L;
}

int find_next_station (int s, int t, vi c) {
    sort(c.begin(), c.end());
    if (s < c.front()) {
        if (t<s) return c.back();
        for (int v : c) if (t<=v) return v;
        return c.back();
    }
    else {
        reverse(c.begin(), c.end());
        if (t>s) return c.back();
        for (int v : c) if (t>=v) return v;
        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...