Submission #1293319

#TimeUsernameProblemLanguageResultExecution timeMemory
1293319SofiatpcStations (IOI20_stations)C++20
52.32 / 100
414 ms572 KiB
#include "stations.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e3+5;
vector<int> adj[MAXN];
int tin[MAXN], tout[MAXN], t;
vector<int> labels;

void dfs(int s, int p){
	tin[s] = ++t;
	for(int viz : adj[s])
		if(viz != p)dfs(viz,s);
	tout[s] = t;
	labels[s] = (tout[s]*1000)+tin[s];
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	labels.resize(n);
	for (int i = 0; i < n-1; i++) {
		adj[u[i]].push_back(v[i]);
		adj[v[i]].push_back(u[i]);
	}

	t = -1;
	dfs(0,-1);

	for(int i = 0; i < n; i++)adj[i].clear();

	return labels;
}

int find_next_station(int s, int t, vector<int> c) {
	t -= (t/1000)*1000;
	int outmx = c.back()/1000;

	int cur = 0;
	while(cur < c.size()){
		int viz = c[cur];
		int in = viz-(viz/1000)*1000, out = viz/1000;
		if(out == outmx)break;
		if(in <= t && t<= out)return viz;
		cur++;
	}

	for(int  j = c.size()-1; j >= cur; j--){
		int viz = c[j];
		int in = viz-(viz/1000)*1000, out = viz/1000;
		if(in <= t && t<= out)return viz;
	}
	return c[cur];
}
#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...