Submission #504963

#TimeUsernameProblemLanguageResultExecution timeMemory
504963amukkalirGame (IOI14_game)C++17
42 / 100
1063 ms9136 KiB
#include "game.h"
#include <bits/stdc++.h> 
using namespace std; 

const int nax = 1500; 
int g[nax][nax], f[nax][nax]; 
int alr[nax][nax]; 
int n; 
set<int> rem[nax+5]; 

void initialize(int N) {
    n = N; 
    for(int i=0; i<n; i++) for(int j=0; j<n; j++) g[i][j] = (i!=j); 
}

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]; 
    vector<bool> vis(n, false); //if the algo is correct, u and v should not have been connected indirectly

    function <void(int, int)> rec = [&] (int node, int x) {
        vis[node] = true; 
        a[x].push_back(node);
        for(int i=0; i<n; i++) {
            if(vis[i] == false && f[node][i] == 1) {
                rec(i, x); 
            }
        }
    };

    rec(u, 0); rec(v, 1); 

    for(int x : a[0]) {
        for(int y : a[1]) {
            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)) {
        f[u][v] = f[v][u] = 1; 
    } else {
        g[u][v] = g[v][u] = 0; 
    }
    return g[u][v]; 
}

/*

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...