Submission #730750

#TimeUsernameProblemLanguageResultExecution timeMemory
730750senthetaStations (IOI20_stations)C++17
100 / 100
930 ms1196 KiB
#include "stations.h"
// author : sentheta aka vanwij
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cassert>
#include<random>
#include<chrono>
#include<cmath>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;

#define Int long long
#define V vector
#define pii pair<int,int>
#define ff first
#define ss second

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

#define pow2(x) (1LL<<(x))
#define msb(x) (63-__builtin_clzll(x))
#define bitcnt(x) (__builtin_popcountll(x))

#define nl '\n'
#define _ << ' ' <<
#define all(x) (x).begin(), (x).end()
#define rep(i,a,b) for(int i = (int)(a); i < (int)(b); i++)
#define dbg(x) if(1) cout << "?" << #x << " : " << (x) << endl << flush;

const int N = 1005;

V<int> adj[N];

int d[N];
int in[N], out[N];
int t = 0;
void dfs(int x=0,int par=-1){
	in[x] = t++;
	for(int y : adj[x]) if(y!=par){
		d[y] = d[x]+1;
		dfs(y, x);
	}
	out[x] = t++;
}

V<int> label(int n,int k,V<int> u,V<int> v){
	rep(i,0,n){
		adj[i].clear();
	}
	rep(i,0,n-1){
		adj[u[i]].push_back(v[i]);
		adj[v[i]].push_back(u[i]);
	}

	t = 0;
	dfs();

	map<int,int> zip;
	rep(i,0,n){
		if(d[i]%2==0) zip[in[i]];
		else zip[out[i]];
	}
	t = 0;
	for(auto&[p,q] : zip) q = t++;

	V<int> ans;
	rep(i,0,n){
		if(d[i]%2==0) ans.push_back(zip[in[i]]);
		else ans.push_back(zip[out[i]]);
	}

	return ans;
}

int find_next_station(int s,int t,V<int> c){
	// s is in[x]
	if(s < c[0]){
		int par = s==0 ? -1 : c.back();

		int l = s+1;
		for(int r : c) if(r!=par){
			if(l<=t && t<=r) return r;
			l = r+1;
		}
		return par;
	}
	// s is out[x]
	else{
		int par = c[0];

		c.push_back(s);
		rep(i,0,c.size()-1){
			if(c[i]<=t && t<=c[i+1]-1) return c[i];
		}
		return par;
	}
}
#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...