Submission #603478

#TimeUsernameProblemLanguageResultExecution timeMemory
603478SeDunionSplit the Attractions (IOI19_split)C++17
18 / 100
89 ms16860 KiB
#include "split.h"
#include<iostream>
#include<vector>
#include<assert.h>

using namespace std;
const int N = 2e5 + 123;

vector<int>g[N];

int used[N];

vector<int>vec;

void dfs(int v) {
	vec.emplace_back(v);
	used[v] = 1;
	for (int to : g[v]) if (!used[to]) {
		dfs(to);
	}
}

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
	vector<int>ans(n, 3);
	int m = p.size();
	for (int i = 0 ; i < m ; ++ i) {
		g[p[i]].emplace_back(q[i]);
		g[q[i]].emplace_back(p[i]);
	}
	int root = 0;
	for (int i = 0 ; i < n ; ++ i) {
		if ((int)g[i].size() == 1) root = i;
	}
	dfs(root);
	assert((int)vec.size() == n);
	for (int i = 0 ; i < a ; ++ i) ans[vec[i]] = 1;
	for (int i = 0 ; i < b ; ++ i) ans[vec[i+a]] = 2;
	//for (int i = 0 ; i < c ; ++ i) ans[vec[i+a+b]] = 3;
	return ans;
}
#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...