Submission #513726

#TimeUsernameProblemLanguageResultExecution timeMemory
513726status_codingGame (IOI14_game)C++14
100 / 100
467 ms22216 KiB
#include "game.h"
#include <bits/stdc++.h>

int n;

int par[2005];
int nr[2005][2005];

int dsu_par(int x)
{
    if(par[x]!=x)
        par[x]=dsu_par(par[x]);
    return par[x];
}
void dsu_merge(int x, int y)
{
    par[y]=x;

    for(int i=1;i<=n;i++)
    {
        nr[x][i] += nr[y][i];
        nr[i][x] = nr[x][i];
    }
}

void initialize(int N)
{
    n = N;

    for(int i=1;i<=n;i++)
    {
        par[i]=i;

        for(int j=1;j<=n;j++)
            nr[i][j]=1;
    }
}

int hasEdge(int x, int y)
{
    x = dsu_par(x+1);
    y = dsu_par(y+1);

    if(x == y)
        return true;

    if(nr[x][y] == 1)
    {
        dsu_merge(x, y);
        return true;
    }

    nr[x][y]--;
    nr[y][x]--;
    return false;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...