제출 #1218247

#제출 시각아이디문제언어결과실행 시간메모리
1218247Hamed_Ghaffari게임 (IOI14_game)C++20
100 / 100
215 ms21880 KiB
#include <bits/stdc++.h>
using namespace std;

const int MXN = 3003;

int n, dsu[MXN], cnt[MXN][MXN], tmp[MXN];

void initialize(int n) {
    ::n = n;
    iota(dsu, dsu+n, 0);
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            cnt[i][j] = i!=j;
}

void merge(int u, int v) {
    for(int i=0; i<n; i++)
        dsu[i] = dsu[i]==v ? u : dsu[i],
        tmp[i] = cnt[u][i] + cnt[v][i];
    for(int i=0; i<n; i++)
        cnt[u][i] = cnt[i][u] = tmp[i];
}

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