제출 #1166433

#제출 시각아이디문제언어결과실행 시간메모리
1166433TsotneSV기지국 (IOI20_stations)C++17
100 / 100
308 ms628 KiB
#include <bits/stdc++.h>
#include "stations.h"
using namespace std;
/*⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣿⠛⣿⠀⠀⠀⠀⣤⣿⢻⡇⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣿⡛⠀⣤⣿⣿⣤⣤⣿⣿⣤⢸⡇⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀
⠀⠀⠀⠀⠀⠀⠀⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡗⠀
⢠⣼⣿⣿⣿⣿⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷
⢸⣿⣿⡟⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣤⣤⣤⣿⣿⣿⣿⣤⣤⣼⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠋       
*/
#define fi first
#define se second
#define pb push_back
#define ins insert
#define sz(a) (int)(a.size())
#define all(x) (x).begin(),(x).end()
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}

#define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
#include "debug.h"
#else
#define debug(...)
#endif

//const int mod = 1e9+7;
//const int mod = 998244353;
const int MAXN=2e5+5; 
const ll inf=1e9,INF=1e18; 

void dfs(int v,int p,int d,int &timer,vector<vi> &g,vi &in,vi &out,vi &val) {

    in[v] = timer++;

    for(int i : g[v]) {
        if(i == p) continue;
        dfs(i,v,d+1,timer,g,in,out,val);
    } out[v] = timer++;

    if(d % 2) val[v] = in[v];
    else val[v] = out[v]; 

}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	
    vector<vi> g(n); vi in(n),out(n),val(n),cmp(2*n+1);

    for(int i=0;i<n-1;i++) g[u[i]].pb(v[i]),g[v[i]].pb(u[i]);

    int timer = 0; 
    
    dfs(0,-1,0,timer,g,in,out,val);

    vi tmp = val; sort(all(tmp));

    for(int i=0;i<n;i++) cmp[tmp[i]] = i;
    for(int i=0;i<n;i++) val[i] = cmp[val[i]];

    return val;
}

int find_next_station(int s, int t, vector<int> c) {
    
    bool odd = 1; sort(all(c));

    for(int i : c) {
        odd &= (i > s);
    }

    if(odd) {

        for(int i : c) {
            if(t >= s and t <= i) return i;
        } return c.back();

    } else {

        if(t > s) return c.front();

        for(int i=1;i<c.size()-1;i++) {
            if(c[i] <= t and t < c[i+1]) return c[i];
        } 
        
        if(c.back() <= t and t < s) return c.back();
        return c.front();

    }

}
#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...