Submission #413462

#TimeUsernameProblemLanguageResultExecution timeMemory
413462AntekbGame (IOI14_game)C++14
100 / 100
508 ms25288 KiB
#include "game.h"
#include<bits/stdc++.h>
#define st first
#define nd second
using namespace std;
const int N=1505;
int E[N][N];
int n;
int r[N];
void initialize(int _n){
	n=_n;
	//cout<<n<<"\n";
	for(int i=0; i<n; i++){
		r[i]=i;
		for(int j=0; j<i; j++){
			E[i][j]=E[j][i]=1;
		}
	}
}
int find(int v){
	if(r[v]==v)return v;
	return r[v]=find(r[v]);
}
void Union(int u, int v){
//cout<<u<<"a"<<v<<"\n";
	
	for(int i=0; i<n; i++){
		if(i==u || i==v)continue;
		E[u][i]+=E[v][i];
		E[i][u]+=E[i][v];
		E[v][i]=0;
		E[i][v]=0;
		assert(E[u][i]==E[i][u]);
	}
	r[v]=u;
}
int hasEdge(int u, int v) {
	//cout<<u<<" "<<v<<"\n";
	u=find(u);
	v=find(v);
	assert(u!=v);
	E[u][v]--;
	E[v][u]--;
	/*for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			cout<<E[i][j]<<" ";
		}
		cout<<"\n";
	}
	cout<<"\n";*/
	if(E[v][u]==0){
		Union(u, v);
		return 1;
	}
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...