제출 #504991

#제출 시각아이디문제언어결과실행 시간메모리
504991amukkalir게임 (IOI14_game)C++17
100 / 100
686 ms19488 KiB
#include "game.h"
#include <bits/stdc++.h> 
using namespace std; 
 
const int nax = 1500; 
int alr[nax][nax]; 
int p[nax]; 
map<int, vector<int>> mem; 
int n; 
 
int par(int a) {
    return p[a] == a ? a : p[a] = par(p[a]); 
}
 
void join (int a, int b) {
    for(auto x : mem[par(a)]) { //since a and b should not have any overlapping member isoke vector aj
        mem[par(b)].push_back(x); 
    }

    mem[par(a)].clear(); 

    p[par(a)] = par(b); 
}
 
void initialize(int N) {
    n = N; 
    for(int i=0; i<n; i++) p[i] = i, mem[i] = {i}; 
}
 
void udhin(int u, int v) {
    alr[u][v] = alr[v][u] = true; 
}
 
bool ud(int u, int v) {
    return alr[u][v]; 
}
 
bool ok (int u, int v) {
    vector<int> a[2]; 
    a[0] = mem[par(u)], a[1] = mem[par(v)]; 
 
    for(int x : a[0]) {
        for(int y : a[1]) {
            //cerr << x << " " << y << endl; 
            if(!ud(x, y)) return false; //kalau ada yg belum ditanya, ga boleh bikin edge
        }
    }
 
    return true; 
}
 
int hasEdge(int u, int v) {
    udhin(u, v); 

    if(ok(u, v)) {
        join(u, v); 
        return 1; 
    } else {
        return 0; 
    }
}
 
/*
 
ga boleh guess node itu connected sebelum r
gak boleh tau 2 node itu connected sebelum ditanyain 
dgn kata lain, ga boleh ada 2 node yang indirectly connected 
(unless 2 node itu udah ditanya)
 
ga bolleh guess node itu disconnected sblm r
ga boleh ada 1 pun node yang ga connect ke edge manapun, kecuali 
node yang ditanya terakhir 
 
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...