제출 #830912

#제출 시각아이디문제언어결과실행 시간메모리
830912Boas기지국 (IOI20_stations)C++17
5 / 100
716 ms676 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef set<int> si;
typedef vector<si> vsi;

#define loop(x, i) for (int i = 0; i < x; i++)

#define ALL(x) (x).begin(), (x).end()

typedef pair<int, int> ii;

vector<int> label(int n, int k, vector<int> u, vector<int> v)
{
	vsi adj(n);
	loop(n - 1, i)
	{
		int a = u[i], b = v[i];
		adj[a].insert(b);
		adj[b].insert(a);
	}
	int root = 0;
	if (k == 1000000)
	{
		loop(n, i)
		{
			if (adj[i].size() > 2)
				root = i;
		}
	}
	else
	{
		loop(n, i)
		{
			if (adj[i].size() == 1)
				root = i;
		}
	}
	vector<int> labels(n, -1);
	queue<ii> q;
	int c = 0;
	for (int i : adj[root])
	{
		q.push({i, 1 + 1000 * c});
		c++;
	}
	labels[root] = 0;
	while (!q.empty())
	{
		auto [i, d] = q.front();
		q.pop();
		labels[i] = d;
		for (int j : adj[i])
		{
			if (labels[j] != -1)
				continue;
			q.push({j, d + 1});
		}
	}
	return labels;
}

int find_next_station(int s, int t, vector<int> c)
{
	if (find(ALL(c), t) != c.end())
		return t;
	if (t / 1000 != s / 1000 || t < s)
		return c[0];
	if (s == 0)
		return t / 1000 + 1;
	return c.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...