Submission #197979

#TimeUsernameProblemLanguageResultExecution timeMemory
197979MinnakhmetovSplit the Attractions (IOI19_split)C++14
18 / 100
153 ms15452 KiB
#include "split.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;
vector<int> g[N];
bool used[N];

vector<int> solve_for_line_or_cyc(int n, int a, int b, int c) {
	vector<int> res(n, 0);

	int x = 0;
	while (x < n && g[x].size() > 1)
		x++;

	if (x == n)
		x = 0;

	vector<int> v;

	while (v.size() < n) {
		used[x] = 1;
		v.push_back(x);

		for (int to : g[x]) {
			if (!used[to]) {
				x = to;
				break;
			}
		}
	}

	for (int i = 0; i < a; i++) {
		res[v[i]] = 1;
	}

	for (int i = a; i < a + b; i++) {
		res[v[i]] = 2;
	}

	for (int i = a + b; i < n; i++) {
		res[v[i]] = 3;
	}

	return res;
}

vector<int> solve_for_two_sets(int n, int a, int b, int c) {
	vector<int> res(n, 0);

	int sz_b = 0;

	queue<int> q;
	q.push(0);
	used[0] = 1;

	while (!q.empty()) {
		int node = q.front();
		q.pop();
		sz_b++;
		res[node] = 2;

		if (sz_b == b)
			break;

		for (int to : g[node]) {
			if (!used[to]) {
				used[to] = 1;
				q.push(to);
			}
		}
	}

	int x = 0;
	while (res[x])
		x++;
	res[x] = 1;

	for (int i = 0; i < n; i++) {
		if (res[i] == 0)
			res[i] = 3;
	}

	return res;
}

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
	int m = p.size();
	for (int i = 0; i < m; i++) {
		g[p[i]].push_back(q[i]);
		g[q[i]].push_back(p[i]);
	}

	bool line = true;

	for (int i = 0; i < n; i++) {
		if (g[i].size() > 2) {
			line = false;
			break;
		}
	}

	vector<int> res(n, 0);

	if (line) {
		res = solve_for_line_or_cyc(n, a, b, c);
	}
	else {
		res = solve_for_two_sets(n, a, b, c);
	}

	return res;
}

Compilation message (stderr)

split.cpp: In function 'std::vector<int> solve_for_line_or_cyc(int, int, int, int)':
split.cpp:21:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (v.size() < n) {
         ~~~~~~~~~^~~
#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...