Submission #1326147

#TimeUsernameProblemLanguageResultExecution timeMemory
1326147opeleklanosStations (IOI20_stations)C++20
0 / 100
391 ms716 KiB
#include <iostream>
#include <vector>
// #include <algorithm>
#include <math.h>
#include "stations.h"
using namespace std;

vector<vector<int>> adj;
vector<int> lb;
vector<int> de;
int ti = 0;

vector<int> in;
vector<int> out;
vector<int> vis;

vector<int> eulerTour;

void dfs(int st, int d){
    de[st] = d;
    vis[st] = 1;
    eulerTour.push_back(st);
    ti++;
    for(auto i : adj[st]){
        if(!vis[i]){
            dfs(i, d+1);
            eulerTour.push_back(st);
        }
    }

}

vector<int> label (int n, int k, vector<int> u, vector<int> v){
    ti = 0;
    adj.assign(n, {});
    in.assign(n, -1);
    out.assign(n, -1);
    vis.assign(n, 0);

    for(int i = 0; i<n-1; i++){
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }

    lb.assign(n, -1);
    de.assign(n, -1);
    dfs(0, 0);

    for(int i = 0; i<eulerTour.size(); i++){
        if(in[eulerTour[i]] == -1) in[eulerTour[i]] = i;
        out[eulerTour[i]] = i;
    }

    for(int i = 0; i<n; i++){
        if(de[i] % 2) lb[i] = out[i];
        else lb[i] = in[i];
    }

    return lb;
}

int subtree(int par, int u){
    return 0;
}


int find_next_station(int s, int t, vector<int> c){
    int i = -1, o = -1;
    if(s == 0){
        for(int i = 0; i<c.size(); i++){
            if(c[i] >= t) return c[i];
        }
        return -1;
    }
    if(s > c[0]){
        if(c.size() == 1) return c[0];
        if(s < t) return c[0];
        for(int i = c.size()-1; i>0; i--){
            if( c[i] <= t ) return c[i];
        }
        return c[0];
    }
    else{
        if(c.size() == 1) return c[0];
        if( t < s || c[c.size()-2] < t) return c[c.size()-1];
        for(int i = 0; i<c.size()-1; i++){
            if(s <= t && t <= c[i]) return c[i];
        }
        return c[c.size()-1];
    }
    return -1;
}


// int main(void){
//     freopen("input.txt", "r", stdin);
//     int n; cin>>n;
//     vector<int> u(n-1, 0);
//     vector<int> v(n-1, 0);
//     for(int i = 0; i<n-1; i++) cin>>u[i]>>v[i];
//     label(n, 100000000, u, v);
    
    
//     cout<<find_next_station(0, 18, {15, 27})<<endl;
    
// }
#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...