Submission #1106464

#TimeUsernameProblemLanguageResultExecution timeMemory
1106464snpmrnhlolStations (IOI20_stations)C++17
100 / 100
836 ms1032 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
    vector <vector<int>> e;
    vector<int> labels;
    e.resize(n);
    int cnt = 0;
    auto dfs = [&](auto self, int node, int p, int d) -> void{
        if(d == 0)labels[node] = cnt++;
        for(auto i:e[node]){
            if(i == p)continue;
            self(self, i, node, d^1);
        }
        if(d == 1)labels[node] = cnt++;
    };
	labels.resize(n);
	for(int i = 0;i < n - 1;i++){
        e[u[i]].push_back(v[i]);
        e[v[i]].push_back(u[i]);
	}
	for(int i = 0;i < n;i++){
        if(e[i].size() == 1){
            dfs(dfs, i, -1, 0);
            break;
        }
	}
	return labels;
}

int find_next_station(int s, int t, std::vector<int> c) {
    if(c.size() == 1)return c[0];
    sort(c.begin(),c.end());
    if(s < c[0]){
        if(s <= t && t <= c[(int)c.size() - 2]){
            int nr = 1000000;
            for(auto i:c){
                if(t <= i){
                    nr = min(nr, i);
                }
            }
            return nr;
        }else{
            return c[(int)c.size() - 1];
        }
    }else{
        if(c[1] <= t && t <= s){
            int nr = -1;
            for(auto i:c){
                if(i <= t){
                    nr = max(nr, i);
                }
            }
            return nr;
        }else{
            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...