이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1505;
int is[N][N];
struct dsu{
int fa[N];
vector <vector<int>> c;
dsu(){
c.resize(N);
for ( int i = 0; i < N; i++ ){
fa[i] = i;
c[i].push_back(i);
}
}
int get(int u){
return fa[u] ^ u ? fa[u] = get(fa[u]) : u;
}
int merge(int u, int v){
u = get(u), v = get(v);
//~ assert(u != v);
if ( c[u].size() < c[v].size() ) swap(u, v);
int cnt = c[u].size() * c[v].size();
for ( auto &x: c[u] ){
for ( auto &y: c[v] ){
cnt -= is[x][y];
}
}
if ( cnt == 0 ){
for ( auto &y: c[v] ){
c[u].push_back(y);
fa[y] = u;
} c[v].clear();
return 1;
}
return 0;
}
} ds;
void initialize(int N) {
}
int hasEdge(int u, int v) {
is[u][v] = is[v][u] = 1;
return ds.merge(u, v);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |