Submission #1287913

#TimeUsernameProblemLanguageResultExecution timeMemory
1287913crispxxStations (IOI20_stations)C++20
0 / 100
363 ms536 KiB
#include "stations.h"

#include <bits/stdc++.h>
using namespace std;

// #define int long long
#define all(x) x.begin(), x.end()
#define pb push_back
#define ar array
#define nl '\n'

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
	vector<vector<int>> adj(n);
	
	for(int i = 0; i < n - 1; i++) {
		adj[u[i]].pb(v[i]);
		adj[v[i]].pb(u[i]);
	}
	
	vector<int> tin(n), tout(n);
	
	int timer = -1;
	
	auto dfs = [&](auto &&self, int v, int p) -> void {
		tin[v] = ++timer;
		for(auto to : adj[v]) {
			if(to == p) continue;
			self(self, to, v);
		}
		tout[v] = timer;
	};
	
	dfs(dfs, 0, 0);
	
	vector<int> lbl(n);
	
	for(int i = 0; i < n; i++) {
		lbl[i] = tin[i] * 1000 + tout[i];
	}
	
	return lbl;
}

int find_next_station(int s, int t, std::vector<int> c) {
	auto check = [&](int u, int v) {
		int tinu = u / 1000;
		int toutu = u % 1000;
		int tinv = v / 1000;
		int toutv = v % 1000;
		return tinv >= tinu && toutv <= toutu;
	};
	
	int n = c.size();
	
	if(!check(s, t)) {
		for(int i = 0; i < n; i++) {
			if(!check(s, c[i])) {
				return c[i];
			}
		}
		assert(false);
	}
	
	for(int i = 0; i < n; i++) {
		if(check(c[i], t)) {
			return c[i];
		}
	}
	
	assert(false);
}
#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...