Submission #1242695

#TimeUsernameProblemLanguageResultExecution timeMemory
1242695iyedooSplit the Attractions (IOI19_split)C++20
7 / 100
44 ms14408 KiB
#include "split.h"

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

vector<vector<int>> graph;
vector<bool> visited;
vector<int> res;

int A = 0, B = 0, C = 0;

void dfs(int u, int a, int b, int c) {
	for (int v: graph[u]) {
		if (visited[v]) continue;

		if (A != a) A++, res[v] = 1;
		else if (B != b) B++, res[v] = 2;
		else if (C != c) C++, res[v] = 3;

		visited[v] = 1;
		dfs(v, a, b, c);
	}
}

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
	
	res.assign(n, 0);
	graph.resize(n);
	visited.assign(n, 0);

	for (int i = 0; i < p.size(); ++i) {
		graph[p[i]].push_back(q[i]);
		graph[q[i]].push_back(p[i]);
	}

	visited[0] = 1;
	res[0] = 1;
	A++;
	dfs(0, a, b, c);

	queue<int> Q;

	Q.push(0);
	visited[0] = 0;
	
	while (!Q.empty()) {
		int u = Q.front(); Q.pop();

		for (int v: graph[u]) {
			if (visited[v]) continue;

			if (A != a) A++, res[v] = 1;
			else if (B != b) B++, res[v] = 2;
			else if (C != c) C++, res[v] = 3;
	
			visited[v] = 1;
			Q.push(v);
		}
	}

	return 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...