Submission #1144423

#TimeUsernameProblemLanguageResultExecution timeMemory
1144423BlockOGGame (IOI14_game)C++20
42 / 100
1095 ms4556 KiB
// 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...