Submission #835270

#TimeUsernameProblemLanguageResultExecution timeMemory
835270_martynasGame (IOI14_game)C++11
42 / 100
1082 ms2720 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

const int mxn = 1505;

int n;
bool adj[mxn][mxn];
bool seen[mxn][mxn];
bool visited[mxn];

void initialize(int N) {
    n = N;
}

void get_comp(int u, vector<int> &comp) {
    visited[u] = true;
    comp.push_back(u);
    for(int v = 0; v < n; v++) if(u != v && !visited[v] && adj[u][v]) {
        get_comp(v, comp);
    }
}

int hasEdge(int u, int v) {
    vector<int> compu, compv;
    fill(visited, visited+mxn, false);
    get_comp(u, compu);
    fill(visited, visited+mxn, false);
    get_comp(v, compv);
    // cerr << "compu:\n";
    // for(int i : compu) cerr << i << " ";
    // cerr << "\n";
    // cerr << "compv:\n";
    // for(int i : compv) cerr << i << " ";
    // cerr << "\n";
    int cnt = 0;
    for(int cu : compu) for(int cv : compv) {
        if(seen[cu][cv]) cnt++;
    }
    seen[u][v] = seen[v][u] = true;
    if(cnt == (int)compu.size()*(int)compv.size()-1) {
        adj[u][v] = adj[v][u] = true;
    }
    return adj[u][v];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...