Submission #1148718

#TimeUsernameProblemLanguageResultExecution timeMemory
1148718minh30082008Stations (IOI20_stations)C++20
100 / 100
303 ms572 KiB
//#include "stations.h"
#include <cstdio>
#include <cassert>
#include <map>
#include <vector>
#include <algorithm>

#include<bits/stdc++.h>
#define INF 1e18
#define fi first
#define se second
#define FOR(i, k, n) for(ll i = k; i <= n; i++)
#define FOR1(i, k, n) for(ll i = k; i >= n; i--)
#define pb push_back
#define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define vi vector<int>
#define pii pair<int, int>
#define vii vector<pii>
#define ll long long
#define vll vector<ll>
#define pll pair<ll, ll>
#define re return 0
#define mii map<int, int>
#define input "chinaflu.inp"
#define output "chinaflu.out"
#define rf 	freopen(input, "r", stdin); freopen(output, "w", stdout)
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 9;
const int base = 998244353;
void add(int &a, int b) 
{
	a += b; 
	if(a >= mod) a -= mod; 
	if(a < 0) a += mod; 
}
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r)
{
	return uniform_int_distribution<int>(l, r) (rd);
}

static int max_label = 0;
static int r, n, k, q;
static std::vector<int> u, v, labels, answers;
static std::map<int, int> reverse_labels;
static std::vector<std::vector<int>> adjlist;
static int s, t, w;
static std::vector<int> c;

int depth[1005], cnt = -1;
vi vv;
vi adj[1005];
void DFS(int u, int par)
{
	if(depth[u] % 2 == 0)
	{
		vv[u] = ++cnt;
	}
	for(auto v : adj[u])
	{
		if(v == par)
			continue;
		depth[v] = depth[u] + 1;
		DFS(v, u);
	}
	if(depth[u] % 2)
	{
		vv[u] = ++cnt;
	}
}
vi label(int n, int k, vi u, vi v)
{
	cnt = -1;
	FOR(i, 0, n - 1)
		adj[i].clear();
	FOR(i, 0, n - 2)
	{
		adj[u[i]].pb(v[i]);
		adj[v[i]].pb(u[i]);
	}
	vv.clear();
	FOR(i, 1, n)
		vv.pb(0);
	depth[0] = 0;
	DFS(0, 0);
	return vv;
}
int find_next_station(int s, int t, vi adj1)
{
	if(adj1.size() == 1)
	{
		return adj1.back();
	}
	if(adj1.back() > s)
	{
		if(t < s || t > adj1.back())
			return adj1.back();
		int id = lower_bound(adj1.begin(), adj1.end(), t) - adj1.begin();
		return adj1[id];
	}
	else
	{
		if(t > s || t < adj1[0])
			return adj1[0];
		int id = upper_bound(adj1.begin(), adj1.end(), t) - adj1.begin() - 1;
		return adj1[id];
	}
}
#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...