제출 #144018

#제출 시각아이디문제언어결과실행 시간메모리
144018tincamateiSplit the Attractions (IOI19_split)C++14
11 / 100
169 ms17968 KiB
#include "split.h"
#include <algorithm>
#include <cstdio>

using namespace std;

const int MAX_N = 100000;
const int MAX_M = 200000;

int lastid;
int low[MAX_N], id[MAX_N];
int depth[MAX_N];
bool critic[MAX_N];

struct Edge {
	int a, b;

	int other(int x) {
		return a ^ b ^ x;
	}
} edges[MAX_M];

vector<int> graph[MAX_N];

void dfs(int nod, int fatherEdge, int d) {
	int bico = 0;
	low[nod] = id[nod] = d;
	depth[nod] = d;
	for(auto it: graph[nod]) {
		int son = edges[it].other(nod);

		if(it != fatherEdge && id[son] == 0) {
			low[son] = id[son] = id[nod] + 1;
			dfs(son, it, d + 1);
			low[nod] = min(low[nod], low[son]);
			if(low[son] >= id[nod]) {
				critic[nod] = true;
				++bico;
			}
		} else if(it != fatherEdge)
			low[nod] = min(low[nod], id[son]);
	}

	if(nod == 0 && bico <= 1)
		critic[nod] = false;
}

vector<int> rez;

void dfs(int nod, int &rem, int color, int papa) {
	if(rem > 0) {
		rem--;
		rez[nod] = color;
	} else
		rez[nod] = 3;

	for(auto it: graph[nod]) {
		int son = edges[it].other(nod);
		if(son != papa && rez[son] == 0) {
			dfs(son, rem, color, nod);
		}
	}
}

vector<int> find_split(int N, int a, int b, int c, vector<int> p, vector<int> q) {
	rez.resize(N, 0);
	for(int i = 0; i < p.size(); ++i) {
		edges[i].a = p[i];
		edges[i].b = q[i];
		
		graph[p[i]].push_back(i);
		graph[q[i]].push_back(i);
	}

	low[0] = id[0] = 1;
	dfs(0, -1, 0);

	int i = 0;
	while(critic[i])
		++i;

	rez[i] = 1;
	dfs(edges[graph[i][0]].other(i), b, 2, -1);
	return rez;
}

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:67:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  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...