Submission #1313501

#TimeUsernameProblemLanguageResultExecution timeMemory
1313501khanhphucscratchStations (IOI20_stations)C++20
100 / 100
395 ms564 KiB
#include "stations.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> ad[1005];
int h[1005], tin[1005], tout[1005], dfsc = 0;
bool visited[1005];
void dfs(int u)
{
    visited[u] = 1; tin[u] = ++dfsc;
    for(int v : ad[u]) if(visited[v] == 0){h[v] = h[u] + 1; dfs(v);}
    visited[u] = 0; tout[u] = ++dfsc;
}
vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	vector<int> labels(n);
    for(int i = 0; i <= n; i++) ad[i].clear();
    for(int i = 0; i < u.size(); i++){
        ad[u[i]].push_back(v[i]);
        ad[v[i]].push_back(u[i]);
    }
    dfsc = 0; dfs(0);
    for(int i = 0; i < n; i++){
        if(h[i]%2 == 0) labels[i] = tin[i];
        else labels[i] = tout[i];
    }
    vector<int> vec = labels;
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    for(int &i : labels) i = upper_bound(vec.begin(), vec.end(), i) - vec.begin();
    labels[0] = 0;
    //cerr<<"B"<<endl;
    //for(int i : labels) cerr<<i<<" ";
    //cerr<<endl;
    return labels;
}

int find_next_station(int s, int t, vector<int> c) {
	sort(c.begin(), c.end());
	if(s == 0){
        //s is the root
        for(int i : c) if(i >= t) return i;
	}
	else if(s < c[0]){
        //s is tin, c is tout
        int par;
        if(c[0] == 0){
            par = c[0]; c.erase(c.begin());
        }
        else{
            par = c.back(); c.pop_back();
        }
        if(c.size() == 0) return par;
        if(t < s || t > c.back()) return par;
        for(int i : c) if(i >= t) return i;
	}
	else{
        //s is tout, c is tin
        int par = c[0]; c.erase(c.begin());
        if(c.size() == 0) return par;
        //cerr<<"A"<<s<<" "<<par<<" "<<t<<endl;
        if(t < c[0] || t > s) return par;
        int last = -1;
        for(int i : c){
            if(i > t) return last;
            last = i;
        }
        return last;
	}
	return -1;
}
#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...