Submission #404536

#TimeUsernameProblemLanguageResultExecution timeMemory
404536Drew_Stations (IOI20_stations)C++17
100 / 100
1121 ms812 KiB
#include "stations.h"
#include <vector>

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

#define pb push_back

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
	vector<int> labels(n, -1);
	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]);
	}

	int ctr = 0;
	function<void(int, int, int)> dfs = [&](int node, int par, int h)
	{
		if (h & 1) labels[node] = ctr++; //in
		for (int to : adj[node])
			if (to != par)
				dfs(to, node, h+1);
		if (~h & 1) labels[node] = ctr++; //out
	};
	dfs(0, -1, 1);
	return labels;
}

int find_next_station(int s, int t, std::vector<int> c) {
	sort(c.begin(), c.end());
	if (c.back() < s) //s is out
	{
		c.pb(s);
		for (int i = (int)c.size() - 2; i >= 1; --i)
		{
			if (c[i] <= t && t < c[i+1])
				return c[i];
		}
		return c[0];
	}
	else // s in in
	{
		c.pb(s); sort(c.begin(), c.end());
		for (int i = 0; i+1 < (int)c.size(); ++i)
		{
			if (c[i] < t && t <= c[i+1])
				return c[i+1];
		}
		return c.back();
	}

	return c[0];
}
#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...