제출 #1308939

#제출 시각아이디문제언어결과실행 시간메모리
1308939minh30082008기지국 (IOI20_stations)C++20
0 / 100
401 ms564 KiB
#include "stations.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define FOR(i, k, n) for(int i = k; i <= n; i++)
#define FOR1(i, k, n) for(int 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 "ALONE.inp"
#define output "ALONE.out"
#define rf 	freopen(input, "r", stdin); freopen(output, "w", stdout)
using namespace std;
const int maxn = 1e4 + 5;
const int mod = 1e9 + 7;
const int base = 998244353;
const int base1 = 31;
const int SZ = 320;
const ll INF = 1e18;
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];
vi adj[1005];
int cnt;
vi ID;
void DFS(int u, int par)
{
	if(depth[u] % 2 == 0)
		ID[u] = cnt++;
	for(auto v : adj[u])
	{
		if(v == par)
			continue;
		depth[v] = depth[u] + 1;
		DFS(v, u);
	}
	if(depth[u] % 2 == 1)
		ID[u] = cnt++;
}
vi label(int n, int k, vi u, vi v) {
	FOR(i, 0, n - 1)
		adj[i].clear();
	cnt = 0;
	ID.resize(n);
	FOR(i, 0, u.size() - 1)
	{
		adj[u[i]].pb(v[i]);
		adj[v[i]].pb(u[i]);
	}
	depth[0] = 0;
	DFS(0, -1);
	return ID;
}
int find_next_station(int s, int t, vi c) {
	if(s < c[0])
	{
		sort(c.begin(), c.end());
		if(t < s || t > c.back())
			return c.back();
		int res = lower_bound(c.begin(), c.end(), t) - c.begin();
		return c[res];
	}
	else
	{
		sort(c.begin(), c.end(), greater<int>());
		if(t > s || t < c[0])
			return c[0];
		int res = upper_bound(c.begin(), c.end(), t) - c.begin() - 1;
		return c[res];
	}
}
#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...