Submission #106445

#TimeUsernameProblemLanguageResultExecution timeMemory
106445Nodir_BobievGame (IOI14_game)C++14
0 / 100
2 ms384 KiB
# include <iostream>

using namespace std;

int N;
int p[2000];
int quan[2000];
int cnt[2000][2000];

int get( int x )
{
	if( p[x] == x )
		return x;
	else
		return p[x] = get( p[x] );
}

void unin( int x, int y )
{
	for ( int i = 1; i <= N; i ++ ){
		if ( i != x ){
			cnt[i][x] += cnt[i][y];
			cnt[x][i] += cnt[i][y];
		}
	}
	quan[x] += quan[y];
	p[y] = x;
}

void initialize( int n )
{
	N = n;
	for ( int i = 1; i <= N; i ++ )
		p[i] = i;
	
	for ( int i = 1; i <= N; i ++ )
		quan[i] = 1;
}

int hasEdge( int v, int u )
{	
	int x = v ;
	int y = u ;
	
	x = get( x );
	y = get( y );
	
	if ( x == y )
		return 0;
			
	if ( quan[x] * quan[y] - cnt[x][y] == 1 ){
		unin( x, y );
		return 1;
	}
	
	else{
		cnt[x][y] ++;
		cnt[y][x] ++;
		return 0;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...