Submission #1311256

#TimeUsernameProblemLanguageResultExecution timeMemory
1311256altayeb_132Stations (IOI20_stations)C++20
76 / 100
509 ms568 KiB
#include<bits/stdc++.h>
using namespace std;
vector<int> adj[1001];
int t1 = 0;
int dt[1001], ft[1001], dpth[1001];
int const INF = 1e9;
#define all(x) (x).begin(), x.end()
void dfs(int n, int pr, int dpt = 0)
{
    dpth[n] = dpt;
    dt[n] = t1++;
    for(auto i : adj[n])
        if(i != pr)
            dfs(i, n, dpt + 1);
    ft[n] = t1++;
}
vector<int> label(int n, int k, vector<int> u, vector<int> v) 
{
    for(int i = 0; i < n; i++)
    {
        adj[i].clear();
        ft[i] = dt[i] = dpth[i] = 0;
    }
    t1 = 0;
    vector<int> labels(n);
    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);

    for (int i = 0; i < n; i++) 
    {
        labels[i] = ((dpth[i] % 2)? dt[i] : ft[i]);
    }
    return labels;
}

int find_next_station(int s, int t, std::vector<int> c) 
{
    int mn = INF, mx = 0, pr = 0;
    for(auto i : c)
    {
        mn = min(mn, i);
        mx = max(mx, i);
    }
    if(mn > s)
    {
        erase(c, mx);
        pr = mx;
        sort(all(c));
        int opn = s + 1;
        for(auto i : c)
        {
            if(t >= opn && t <= i)
            {
                return i;
            }
            opn = i + 1;
        }
    }
    else
    {
        erase(c, mn);
        pr = mn;
        sort(all(c));
        reverse(all(c));
        int cls = s - 1;
        for(auto i : c)
        {
            if(t <= cls && t >= i)
            {
                return i;
            }
            cls = i - 1;
        }
    }
    return pr;
}
#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...