Submission #1242703

#TimeUsernameProblemLanguageResultExecution timeMemory
1242703iyedooSplit the Attractions (IOI19_split)C++20
0 / 100
0 ms328 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;

int far;

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

		visited[v] = 1;
		far = v;
		dfs(v);
	}
}

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);
	
	queue<int> Q;

	visited.assign(n, 0);
	
	Q.push(far);
	A++;
	res[far] = 1;
	visited[far] = 1;
	
	while (!Q.empty()) {
		int u = Q.front(); Q.pop();
		cout << u << "\n";

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