Submission #1175524

#TimeUsernameProblemLanguageResultExecution timeMemory
1175524hyakupStations (IOI20_stations)C++20
100 / 100
306 ms596 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

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

	int tempo = 0;
	function<void(int, int, int)> dfs = [&]( int cur, int pai, int t ){
		if( t ) resp[cur] = ++tempo;
		for( int viz : adj[cur] ) if( viz != pai ) dfs( viz, cur, t^1 );
		if( !t ) resp[cur] = ++tempo;
	};

	dfs( 0, 0, 1 );

	return resp;
}

int find_next_station(int s, int t, vector<int> adj ) {
	if( adj[0] < s ){
		sort( adj.rbegin(), adj.rend() );
		int last = s;
		for( int i = 0; i + 1 < (int)adj.size(); i++ ){
			if( adj[i] <= t && t < last ) return adj[i];
			last = adj[i];
		}
		return adj.back();
	}
	else{
		sort( adj.begin(), adj.end() );
		int last = s;
		for( int i = 0; i + 1 < (int)adj.size(); i++ ){
			if( last < t && t <= adj[i] ) return adj[i];
			last = adj[i];
		}
		return adj.back();
	}
}
#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...