Submission #31719

#TimeUsernameProblemLanguageResultExecution timeMemory
31719top34051Game (IOI14_game)C++14
42 / 100
43 ms19660 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
#define maxn 1505

int n;
int vis[maxn];
int edge[maxn][maxn];
vector<int> dst, src;

void gentree() {
    int i,a,b;
    for(i=1;i<=n;i++) dst.push_back(i);
    random_shuffle(dst.begin(),dst.end());
    src.push_back(dst[0]);
    for(i=1;i<n;i++) {
        a = src[rand()%src.size()];
        b = dst[i];
        src.push_back(b);
        edge[a][b] = edge[b][a] = 1;
    }
}

void dfs(int x) {
    vis[x] = 1;
    for(int i=0;i<n;i++) if(!vis[i] && edge[x][i]) dfs(i);
}

bool check(int x,int y) {
    memset(vis,0,sizeof(vis));
    dfs(x);
    if(vis[y]) return 1;
    return 0;
}

void initialize(int N) {
    n = N;
    if(n>80) gentree();
    else memset(edge,1,sizeof(edge));
}

int hasEdge(int u, int v) {
    if(n>80) return edge[u][v];
    edge[u][v] = edge[v][u] = 0;
    if(!check(u,v)) edge[u][v] = edge[v][u] = 1;
    return edge[u][v];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...