제출 #1146745

#제출 시각아이디문제언어결과실행 시간메모리
1146745BlockOG게임 (IOI14_game)C++20
42 / 100
1096 ms4604 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 n, call_num;

void initialize(int N) {
    n = N;
    call_num = 0;
    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 dfs(int i, int j) {
    if (i == j) return true;
    if (used[i]) return false;
    used[i] = true;

    for (int it = links[i][0][1]; links[i][it][1] != -1; it = links[i][it][1])
        if (dfs(it, j)) return true;

    return false;
}

int hasEdge(int u, int v) {
    call_num++;
    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 (call_num >= n - 1 && !dfs(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...