제출 #926945

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

const int NM = 1000;
 
vector <int> adj[NM+5];
int dep[NM+5];
int timer = 0, tin[NM+5], tout[NM+5];
vector <int> arr;
 
void dfs(int u, int p){
	dep[u] = (p == -1 ? 0 : dep[p]+1);
	tin[u] = ++timer;
	for (int v : adj[u]){
		if (v == p) continue;
		dfs(v, u);
	}
	tout[u] = ++timer;
}
 
vector <int> label(int n, int k, vector <int> u, vector <int> v){
	for (int i = 0; i < n; i++) adj[i].clear();
	for (int i = 0; i < n-1; i++){
		adj[u[i]].push_back(v[i]);
		adj[v[i]].push_back(u[i]);
	}
	dfs(0, -1);
	arr.clear();
	for (int i = 0; i < n; i++){
		if (dep[i]&1) arr.push_back(tout[i]); else arr.push_back(tin[i]);
	}
	sort(arr.begin(), arr.end());
	vector <int> ans(n);
	for (int i = 0; i < n; i++){
		if (dep[i]&1) ans[i] = lower_bound(arr.begin(), arr.end(), tout[i])-arr.begin();
		else ans[i] = lower_bound(arr.begin(), arr.end(), tin[i])-arr.begin();
	}
	return ans;
}
 
int find_next_station(int s, int t, vector <int> c){
	if (s < c.front()){
		if (t < s || t > c.back()) return c.back();
		return c[lower_bound(c.begin(), c.end(), t)-c.begin()];
	}
	else{
		if (t < c.front() || t > s) return c.front();
		return c[--upper_bound(c.begin(), c.end(), t)-c.begin()];
	}
}
#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...