이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
#include "bits/stdc++.h"
using namespace std;
const int maxn = 1501;
int dsu[maxn];
int tmp[maxn];
int adj[maxn][maxn];
int N;
int Find (int i) {
return dsu[i] == i ? i : dsu[i] = Find(dsu[i]);
}
void Union (int i, int j) {
dsu[Find(i)] = Find(j);
}
void initialize(int n) {
N = n;
for (int i = 0 ; i < n ; i++) {
dsu[i] = i;
for (int j = i + 1 ; j < n ; j++) adj[i][j] = 0;
}
}
int hasEdge(int u, int v) { // u < v
if (v < u) swap(u, v);
adj[u][v] = 1;
if (Find(u) == Find(v)) {
return 0;
}
int ret = 0;
copy(dsu, dsu + N, tmp);
for (int i = 0 ; i < N ; i++) {
for (int j = i + 1 ; j < N ; j++) {
if (!adj[i][j] and Find(i) != Find(j)) Union(i, j);
}
}
int rut = Find(0);
for (int i = 1 ; i < N ; i++) if (rut != Find(i)) ret = 1;
copy(tmp, tmp + N, dsu);
if (ret) Union(u, v);
return ret;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |