제출 #799577

#제출 시각아이디문제언어결과실행 시간메모리
799577QwertyPiStations (IOI20_stations)C++14
0 / 100
788 ms652 KiB
#include "stations.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e3 + 11;
vector<int> G[MAXN];
int sz[MAXN], L[MAXN];

void dfs_prec(int v, int pa = -1){
	int _sz = 1;
	for(auto u : G[v]){
		if(u != pa){
			dfs_prec(u, v); _sz += sz[u];
		}
	}
	sz[v] = _sz;
}

void dfs_label(int v, int pa, int l, int r, bool large){
	L[v] = large ? r-- : l++;
	for(auto u : G[v]){
		if(u != pa){
			dfs_label(u, v, l, l + sz[u] - 1, !large); l += sz[u];
		}
	}
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	for(int i = 0; i < n; i++){
		G[i].clear();
	}
	for(int i = 0; i < n - 1; i++){
		G[u[i]].push_back(v[i]);
		G[v[i]].push_back(u[i]);
	}
	dfs_prec(0);
	dfs_label(0, -1, 0, n - 1, true);
	vector<int> labels(n);
	for(int i = 0; i < n; i++){
		labels[i] = L[i];
	}
	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]){
		for(int i = 1; i < (int) c.size(); i++){
			if(c[i] >= t) return c[i];
		}
		return c[0];
	}else{
		for(int i = (int) c.size() - 2; i >= 0; i--){
			if(c[i] <= t) return c[i];
		}
		return c[(int) c.size() - 1];
	}
	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...