제출 #584353

#제출 시각아이디문제언어결과실행 시간메모리
584353Valaki2기지국 (IOI20_stations)C++14
100 / 100
1006 ms752 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

void dfs(int cur, bool color, int &timer, vector<int> &res, vector<bool> &vis, vector<vector<int> > &g) {
    vis[cur] = true;
    if(color) {
        timer++;
        res[cur] = timer;
    }
    for(int nei : g[cur]) {
        if(!vis[nei]) {
            dfs(nei, !color, timer, res, vis, g);
        }
    }
    if(!color) {
        timer++;
        res[cur] = timer;
    }
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
    int timer = 0;
    vector<int> res(n, 0);
    vector<bool> vis(n, false);
    vector<vector<int> > g(n);
    for(int i = 0; i < n - 1; i++) {
        g[u[i]].pb(v[i]);
        g[v[i]].pb(u[i]);
    }
    dfs(0, true, timer, res, vis, g);
    /*for(int x : res) {
        cout << x << " ";
    }
    cout << "\n";*/
    return res;
}

#define ans(x) int tmp = (to_swap ? ceil - x : x); /*cout << "Answer: " << tmp << "\n";*/ return tmp;

int find_next_station(int s, int t, vector<int> c) {
    /*cout << "Question:\n";
    cout << s << " " << t << "\n";
    for(int x : c) {
        cout << x << " ";
    }
    cout << "\n";*/
	if(s == 1) {
        for(int &x : c) {
            if(t <= x) {
                //cout << "Answer: " << x << "\n";
                return x;
            }
        }
	}
	bool to_swap = false;
	int ceil = max({s, t, *max_element(c.begin(), c.end())}) + 1;
	if(c[0] < s) {
        to_swap = true;
        s = ceil - s;
        t = ceil - t;
        for(int &x : c) {
            x = ceil - x;
        }
        reverse(c.begin(), c.end());
	}
	int p = c.back();
	c.resize((int) c.size() - 1);
	if(t < s) {
        ans(p);
	}
    for(int &x : c) {
        if(t <= x) {
            ans(x);
        }
    }
    ans(p);
}
#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...