Submission #1165093

#TimeUsernameProblemLanguageResultExecution timeMemory
1165093boclobanchat게임 (IOI14_game)C++20
100 / 100
213 ms16076 KiB
#include"game.h"
#include<bits/stdc++.h>
using namespace std;
int N;
int dsu[1666],F[1666][1666],cnt[1666];
int root(int i)
{
	if(!dsu[i]) return i;
	return dsu[i]=root(dsu[i]);
}
void merge(int i,int j)
{
	if((i=root(i))==(j=root(j))) return ;
	dsu[j]=i,cnt[i]+=cnt[j],F[min(i,j)][max(i,j)]=0;
	for(int a=1;a<=N;a++) F[min(a,i)][max(a,i)]+=F[min(a,j)][max(a,j)],F[min(a,j)][max(a,j)]=0;
}
void initialize(int n)
{
	N=n;
	for(int i=1;i<=n;i++) cnt[i]=1;
	return ;
}
int hasEdge(int u,int v)
{
	u=root(++u),v=root(++v);
	if(u>v) swap(u,v);
	if(++F[u][v]==cnt[u]*cnt[v])
	{
		merge(u,v);
		return 1;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...