제출 #1256792

#제출 시각아이디문제언어결과실행 시간메모리
1256792dssfsuper2게임 (IOI14_game)C++20
100 / 100
262 ms15932 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
struct DSU{
    int n; vector<int> a;
    vector<vector<int>> nbtc;
    DSU(int N){
        n=N;
        a.assign(N, -1);
        nbtc.assign(N, vector<int>(N, 0));
    }
    int get(int x){return (a[x]<0 ? x:a[x]=get(a[x]));}
    bool connect(int u, int v){
        int x = get(u);
        int y = get(v);
        if(a[x]>a[y])swap(x, y);
        if(x==y)return false;
        int tts=a[x]*a[y];
        if(nbtc[x][y]<tts-1){
            nbtc[x][y]++;
            nbtc[y][x]++;
            return false;
        }
        else{
            a[x]+=a[y];
            a[y]=x;
            for(int i = 0;i<n;i++){
                nbtc[x][i]+=nbtc[y][i];
                nbtc[i][x]+=nbtc[i][y];
            }
            return true;
        }
    }
};
DSU m(1501);
void initialize(int n) {;
}

int hasEdge(int u, int v) {
    return (int)(m.connect(u, v));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...