Submission #683006

#TimeUsernameProblemLanguageResultExecution timeMemory
683006EddardStations (IOI20_stations)C++17
100 / 100
964 ms872 KiB
#include "stations.h"
#include <bits/stdc++.h>


using namespace std;


void setLabel(int u, int par, int f, vector<int> &labels, vector<vector<int>> &adj, int &c) {
    
    if (f) labels[u] = c++;
    
    for (auto v: adj[u]) if (v != par) setLabel(v, u, !f, labels, adj, c);
    
    if (!f) labels[u] = c++;
    
}

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
    
    
    vector<int> labels(n, -1);
    vector<vector<int>> adj(n);
    int c = 0;
    
    for (int i = 0; i < n - 1; ++i) {
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    
    setLabel(0, -1, 0, labels, adj, c);
    
    return labels;
}

int find_next_station(int s, int t, std::vector<int> c) {
    
    if (s < c[0]) {
        
        if (t < s || t >= c.back()) return c.back();
        
        auto it = lower_bound(c.begin(), c.end(), t) - c.begin();
        return c[it];
        
    } else {
        
        if (t > s || t <= c[0]) return c[0];
        
        auto it = upper_bound(c.begin(), c.end(), t) - c.begin() - 1;
        return c[it];
        
    }
    
}
#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...