Submission #129627

#TimeUsernameProblemLanguageResultExecution timeMemory
129627Sorting게임 (IOI14_game)C++14
42 / 100
1073 ms1432 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 1507;

int n;
int par[N], sz[N];
bool e[N][N];

void find_par(int u){
	if(u == par[u]){
		return;
	}

	find_par(par[u]);
	par[u] = par[par[u]];
}

bool unite(int u, int v){
	find_par(u);
	find_par(v);

	if(par[u] == par[v]){
		return false;
	}

	if(sz[par[u]] < sz[par[v]]){
		swap(u, v);
	}

	sz[par[u]] += sz[par[v]];
	par[par[v]] = par[u];

	return true;
}

void initialize(int _n){
	n = _n;
	for(int i = 0; i < n; i++){
		par[i] = i;
		sz[i] = 1;
	}
}

bool eq(int a, int b, int c, int d){
	if(a == c && b == d){
		return true;
	}
	if(a == d && b == c){
		return true;
	}

	return false;
}

int hasEdge(int u, int v){
	for(int i = 0; i < n; i++){
		find_par(i);
	}

	int cnt = 0;

	if(par[u] == par[v]){
		while(true);
	}

	for(int i = 0; i < n; i++){
		for(int j = i + 1; j < n; j++){
			if(eq(par[i], par[j], par[u], par[v]) && !e[i][j]){
				cnt++;
			}	
		}
	}

	e[u][v] = true;
	e[v][u] = true;

	if(cnt == 1){
		unite(u, v);
		return 1;
	}

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...