Submission #1060234

#TimeUsernameProblemLanguageResultExecution timeMemory
1060234MrDogMeat게임 (IOI14_game)C++17
100 / 100
237 ms26704 KiB
#include<bits/stdc++.h>
#include "game.h"

using namespace std;

const int MAX_N = 1505;

int N;
int head[MAX_N], tail[MAX_N], nxt[MAX_N], Size[MAX_N];
int cnt[MAX_N][MAX_N];

void initialize(int n) {
    N = n;
    for(int i = 0; i < n; i++) {
        head[i] = tail[i] = i;
        nxt[i] = -1;
        Size[i] = 1;
        for(int j = 0; j < n; j++) {
            cnt[i][j] = 1;
        }
    }
}

void Union(int u, int v) {
    if(Size[u] > Size[v]) swap(u, v);

    for(int i = tail[u]; i > -1; i = nxt[i]) {
        head[i] = v;
    }
    nxt[u] = tail[v];
    tail[v] = tail[u];
    Size[v] += Size[u];

    for(int i = 0; i < N; i++) {
        cnt[i][v] = cnt[v][i] = cnt[i][u] + cnt[i][v];
    }
}

int hasEdge(int u, int v) {
    u = head[u], v = head[v];
    if(cnt[u][v] == 1) {
        Union(u, v);
        return 1;
    }
    cnt[u][v]--;
    cnt[v][u]--;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...