제출 #986949

#제출 시각아이디문제언어결과실행 시간메모리
986949PagodePaivaSplit the Attractions (IOI19_split)C++17
11 / 100
66 ms16592 KiB
#include "split.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;

vector <int> g[N];
int pai[N];
int folha;
int mark[N];

void dfs(int v, int p){
	int con = 0;
	pai[v] = p;
	mark[v] = 1;
	for(auto x : g[v]){
		if(x == p) continue;
		if(mark[x] == 1) continue;
		con++;
		dfs(x, v);
	}
	if(con == 0) folha = v;
}

int res[N];

void solve(int v, int &tam){
	if(tam == 0) return;
	tam--;
	res[v] = 2;
	mark[v] = 1;
	for(auto x : g[v]){
		if(mark[x]) continue;
		solve(x, tam);
	}
	return;
}

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++){
		int a = p[i], b = q[i];
		a++;
		b++;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	dfs(1, 1);
	memset(mark, 0, sizeof mark);
	res[folha] = 1;
	mark[folha] = 1;
	solve(pai[folha], b);
	vector <int> ans;
	for(int i = 1;i <= n;i++){
		if(res[i] == 0) res[i] = 3;
		ans.push_back(res[i]);
	}
	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...