Submission #871274

#TimeUsernameProblemLanguageResultExecution timeMemory
871274NintsiChkhaidzeGame (IOI14_game)C++17
0 / 100
1 ms4552 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 15005;
int p[N],sz[N],cnt[N][N],n;

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

void dsu(int x,int y){
	int px=P(x),py = P(y);
	if (px==py) return;
	if (sz[px] < sz[py]) swap(px,py);
	sz[px] += sz[py];
	sz[py] = 0;
	p[py] = px;
	
	for (int i = 1; i <= n; i++){
		int par = P(i);
		if (par != px) {
			cnt[px][par] += cnt[py][par];
			cnt[par][px] = cnt[px][par];
		}
	}
	
}
void initialize (int m) {
	n = m;
	for (int i = 1; i <= n; i++){
		p[i] = i;
		sz[i] = 1;
	}
}

int hasEdge(int u, int v) {
    u = P(u+1);
    v = P(v+1);
    cnt[u][v]++;
    cnt[v][u]++;
    if (u != v && cnt[u][v] == sz[u] * sz[v]){
    	dsu(u,v);
    	return 1;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...