제출 #1267826

#제출 시각아이디문제언어결과실행 시간메모리
1267826cmiuc게임 (IOI14_game)C++20
100 / 100
272 ms15876 KiB
#include <iostream>
#include <vector>

#include "game.h"
using namespace std;
int M, s[1505][1505], par[1505];

void initialize(int N){
	M = N;
	for (int i=1;i<=M;i++)
		for (int j=1;j<=M;j++)
			s[i][j] = (i != j);
}

int root(int v){
	if (par[v] == 0)
		return v;
	par[v] = root(par[v]);
	return par[v];
}

int hasEdge(int u, int v){
	// for (int i=1;i<=M;i++){
	// 	for (int j=1;j<=M;j++)
	// 		if (i != j and root(i) == i and root(j) == j)
	// 			cout<<i<<" "<<j<<" "<<s[i][j]<<'\n';
	// }
	u = root(u + 1);
	v = root(v + 1);
	// cout<<u<<" "<<v<<" aa  ";

	if (s[u][v] != 1){
		s[u][v] = s[v][u] = s[u][v] - 1;
		return 0;
	}
	for (int i =1;i<=M;i++)
		if (i != u and i != v and root(i) == i)
			s[u][i] = s[i][u] = s[i][v] + s[i][u];
	par[v] = u;
	return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...