Submission #1168835

#TimeUsernameProblemLanguageResultExecution timeMemory
1168835aycnl기지국 (IOI20_stations)C++20
0 / 100
304 ms576 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

#define ii pair <int, int>
#define ff first
#define ss second
#define bit(i) (1 << (i))

#define fto(i, a, b) for (int i = (a); i <= (b); ++i)
#define fdto(i, a, b) for (int i = (a); i >= (b); --i)
#define flto(i, a, b) for (int i = (a); (1 << i) <= (b); ++i)

#define pb push_back
#define pf push_front

#define endl "\n"
#define oo (int)(998244353)
#define maxN 1005

#define l(s) s.length()

#define vi vector <int>
#define vii vector <ii>

#define fat(x, y) for (auto x : y)
#define fit(x, y) for (int x : y)
#define fiit(x, y) for (ii x : y)

#define EPS 1e-9
#define pi (acos(-1))
#define ll long long

int tme;
vi ke[maxN];
int pos[maxN], en[maxN], h[maxN];

void dfs(int u, int par) {
    pos[u] = tme++;
    for (int v : ke[u]) if (v != par) {
        h[v] = h[u] + 1;
        dfs(v, u);
    }
    en[u] = (tme - 1);
}

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
    tme = 0;
    fto(i, 0, n-1) ke[i].clear();
    fto(i, 0, n-2) {
        ke[u[i]].pb(v[i]);
        ke[v[i]].pb(u[i]);
    }
    dfs(0, -1);
    vii tmp;
    fto(i, 0, n-1) {
     if (h[i]%2 == 0) {
            tmp.pb({pos[i], -i});
        } else {
            tmp.pb({en[i], i});
        }
    }
    sort(tmp.begin(), tmp.end());
    vi res(n, 0);
    fto(i, 0, n-1) res[abs(tmp[i].ss)] = i;
    //fto(i, 0, n-1) cout << res[i] << " "; cout << endl;

    return res;
}

int find_next_station(int s, int t, std::vector<int> c) {
    int sz = int(c.size());
    if (sz == 1) return c[0];
    if (s == 0) {
        fto(i, 0, sz - 1) if (c[i] >= t) return c[i];
        return c[0];
    }

    if (s < c[0]) {
        if (t > c[sz-2] || t < s) return c[sz-1];
        fto(i, 0, sz-1) if (c[i] >= t) return c[i];
    } else {
        if (t > s || t < c[1]) return c[0];
        fdto(i, sz-1, 0) if (c[i] <= t) return c[i];
    }

    return c[0];
}
#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...