Submission #23691

#TimeUsernameProblemLanguageResultExecution timeMemory
23691HiasatGame (IOI14_game)C++14
0 / 100
0 ms10828 KiB
#include "game.h"
#include <iostream>
#include <cstdio>
#include <set>
#include <vector>
#include <assert.h>

using namespace std;

int dsu[2010];
int rem[2010];
int full;

int find(int u){
	return dsu[u] == u ? u : dsu[u] = find(dsu[u]);
}
void initialize(int n) {
	full = n * (n-1);
	full/=2;
	for (int i = 0; i < n; ++i){
		dsu[i] = i;
		rem[i] = n-1;
	}
}

int r = 0;
int hasEdge(int u, int v) {
	r++;
	int a = find(u);
	int b = find(v);
	rem[a]--;
	rem[b]--;
	if(a == b){
		return 0;
	}

	if(rem[a] == 0 || rem[b] == 0){
		rem[b] += rem[a];
		if(r != full)
			assert(rem[b]);
		dsu[a] = b;
		return 1;
	}
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...