Submission #817050

#TimeUsernameProblemLanguageResultExecution timeMemory
817050vjudge1Split the Attractions (IOI19_split)C++17
0 / 100
3 ms6588 KiB
#include "split.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <bitset>
#include <array>
#include <iomanip>
using namespace std;

const int nax = (int)200'000;
vector<int>adj[nax];
vector<int>color(nax, 0);
vector<int>parent(nax, 0);

vector<int>cyc;
void dfs(int u, int p){
	if (color[u] == 2)return;
	//cout << u << " " << p << endl;
	if (color[u] == 1){
		//cyc.push_back(u);
		if (!cyc.empty())return;
		int k = p;
		while(k != u){
			cyc.push_back(k);
			k = parent[k];
		}
		cyc.push_back(u);
		//cout << 1<<endl;
		return;
	}
	color[u] = 1;
	parent[u] = p;
	for(auto x : adj[u]){
		if (x == p)continue;
		dfs(x,u);
	}
	color[u] = 2;
}

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
	if (n == 3){
		return {1,2,3};
	}
	
	for (int i = 0; i < p.size(); i++){
		adj[p[i]].push_back(q[i]);
		adj[q[i]].push_back(p[i]);
	}
	dfs(0,-1);
	vector<int>res(n);
	if (cyc.empty()){
		for (int i = 0; i < a; i++)res[i] = 1;
		for (int i = a; i < b + a; i++)res[i] = 2;
		for (int i = b; i < c + b + a; i++)res[i] = 3;
		return res;
	}else{
		for (int i = 0; i < n; i++)color[i] = 0;
		
		for (int i : cyc){
		//	cout << i << " ";
			color[i] = 1;
			res[i] = 1;
		}
		//cout << endl;

		bool ok = 0;
		for (int i = 0; i < n; i++){
			if (!color[i]){
				res[i] = 2;
				ok = 1;
			}
		}
		res[cyc[0]] = 3;
		if (!ok)res[cyc[1]] = 2;

	}
	return res;
}

Compilation message (stderr)

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:60:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |  for (int i = 0; i < p.size(); i++){
      |                  ~~^~~~~~~~~~
#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...