Submission #603358

#TimeUsernameProblemLanguageResultExecution timeMemory
603358ShithilaSplit the Attractions (IOI19_split)C++14
0 / 100
29 ms3400 KiB
#include "split.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
	vector<int> res;
	int m=p.size();
	//cout<<m<<endl;
	int connected[m][2];
	bool visited[m];
	
	for(int i=0;i<n;i++)
	{
		connected[i][0]=-1;
		connected[i][1]=-1;
		visited[i]=false;
		res.push_back(3);
	}
	for(int i=0;i<m;i++)
	{
		int x=p[i];
		int y=q[i];
		if(connected[x][0]==-1) connected[x][0]=y;
		else connected[x][1]=y;
		if(connected[y][0]==-1) connected[y][0]=x;
		else connected[y][1]=x;
	}
	int startpos=-1;
	int endpos=-1;
	for(int i=0;i<n;i++)
	{
		if(connected[i][0]==-1 || connected[i][1]==-1)
		{
			if(startpos==-1) startpos=i;
			else endpos=i;
		}
	}
	int startcount=0;
	bool error=false;
	while(startcount<a)
	{
		visited[startpos]=true;
		res[startpos]=1;
		startcount++;
		if(visited[connected[startpos][0]]==true)
		{
			if(visited[connected[startpos][1]]==true)
			{
				error=true;
			} 
			startpos=connected[startpos][1];
		}
		else startpos=connected[startpos][0];
	}
	int endcount=0;
	while(endcount<b)
	{
		visited[endpos]=true;
		res[endpos]=2;
		endcount++;
		if(visited[connected[endpos][0]]==true)
		{
			if(visited[connected[endpos][1]]==true)
			{
				error=true;
			} 
			endpos=connected[endpos][1];
		}
		else endpos=connected[endpos][0];
	}
	if(error==true)
	{
		for(int i=0;i<n;i++)
	{
		res[i]=0;
	}
	}
	/*for(int i=0;i<n;i++)
	{
		cout<<res[i]<<" ";
	}
	cout<<endl;*/
	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...