Submission #1168808

#TimeUsernameProblemLanguageResultExecution timeMemory
1168808windowwifeStations (IOI20_stations)C++20
0 / 100
304 ms2908 KiB
#ifndef rtgsp
#include "stations.h"
#endif

#include<bits/stdc++.h>
#define ll long long
#define task ""
using namespace std;
const int maxn = 1e5 + 1;
int t, d[maxn], tin[maxn], tout[maxn];
vector<int> adj[maxn], L, L2;
void dfs (int u, int p)
{
    tin[u] = t++;
    for (int v : adj[u])
    {
        if (v == p) continue;
        d[v] = d[u] + 1;
        dfs(v, u);
    }
    tout[u] = t++;
    if (d[u] & 1) L[u] = L2[u] = tout[u];
    else L[u] = L2[u] = tin[u];
}
vector<int> label (int n, int k, vector<int> u, vector<int> v)
{
    t = 0;
    for (int i = 0; i < n; i++)
    {
        adj[i].clear();
        tin[i] = tout[i] = 0;
    }
    L.resize(n, 0);
    L2.resize(n, 0);
    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);
    sort(L2.begin(), L2.end());
    for (int i = 0; i < n; i++)
        L[i] = lower_bound(L2.begin(), L2.end(), L[i]) - L2.begin();
    return L;
}
int find_next_station (int s, int t, vector<int> c)
{
    bool ok = 0;
    if (s > c.back()) ok = 1;
    if (ok)
    {
        if (t <= c[0] || t > s) return c[0];
        c.push_back(s);
        for (int i = 1; i < (int)c.size() - 1; i++)
            if (t >= c[i] && t < c[i + 1])
                return c[i];
    }
    else
    {
        if (t < s || t >= c.back()) return c.back();
        c.insert(c.begin(), s);
        for (int i = 1; i < (int)c.size(); i++)
            if (t > c[i - 1] && t <= c[i])
                return c[i];
    }
    return -1;
}

#ifdef rtgsp
int main()
{
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    vector<int> L = label(5, 10, {0, 1, 1, 2}, {1, 2, 3, 4});
    for (int i : L) cout << i << " ";
    cout << '\n';
    cout << find_next_station(1, 0, {2, 4}) << '\n';
    cout << find_next_station(4, 3, {0, 1, 3}) << '\n';
}
#endif
#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...