제출 #603456

#제출 시각아이디문제언어결과실행 시간메모리
603456SeDunionSplit the Attractions (IOI19_split)C++17
0 / 100
4 ms4964 KiB
#include "split.h"
#include<iostream>
#include<vector>

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

vector<int>g[N];

int A, B;

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);
	for (int i = 0 ; i < n - 1 ; ++ i) {
		g[p[i]].emplace_back(q[i]);
		g[q[i]].emplace_back(p[i]);
	}
	if (a > b) swap(a, b);
	if (b > c) swap(b, c);
	if (a > b) swap(a, b);
	A = a, B = b;
	int root = 0;
	while ((int)g[root].size() == 2) ++root;
	dfs(root);
	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...