// mrrrow mnyaa ;3c
// go play vivid/stasis! it's a really awesome free game on steam
int links[1502][1502][2];
bool used[1502];
int q[1502];
int n;
void initialize(int N) {
n = N;
for (int i = 1; i <= n; i++) {
links[i][0][1] = 1;
for (int j = 0; j < n; j++) {
links[i][j + 1][0] = j;
links[i][j + 1][1] = j + 2;
}
links[i][n + 1][1] = -1;
}
}
bool bfs(int i, int j) {
int s = 0, e = 0;
q[e++] = i;
used[i] = true;
while (s < e) {
int i = q[s++];
if (i == j) return true;
for (int it = links[i][0][1]; links[i][it][1] != -1; it = links[i][it][1])
if (!used[it]) used[it] = true, q[e++] = it;
}
return false;
}
int hasEdge(int u, int v) {
u++, v++;
int up = links[u][v][0], un = links[u][v][1];
int vp = links[v][u][0], vn = links[v][u][1];
links[u][up][1] = un;
links[u][un][0] = up;
links[v][vp][1] = vn;
links[v][vn][0] = vp;
for (int i = 1; i <= n; i++) used[i] = false;
if (!bfs(u, v)) {
links[u][up][1] = v;
links[u][un][0] = v;
links[v][vp][1] = u;
links[v][vn][0] = u;
return true;
} else return false;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |