Submission #383117

#TimeUsernameProblemLanguageResultExecution timeMemory
383117ScarletSGame (IOI14_game)C++17
100 / 100
496 ms22004 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1500;
int n, pt[N], sz[N], e[N][N];

int find(int x)
{
    if (x==pt[x])
        return x;
    return pt[x] = find(pt[x]);
}

void unite(int x, int y)
{
    if (sz[y]>sz[x])
        swap(x,y);
    pt[y]=x;
    sz[x]+=sz[y];
    for (int i=0;i<n;++i)
    {
        e[x][i]+=e[y][i];
        e[i][x]=e[x][i];
    }
}

int hasEdge(int u, int v)
{
    int x = find(u), y = find(v);
    if (x == y)
        return 0;
    if (e[x][y]==1)
    {
        unite(x,y);
        return 1;
    }
    --e[x][y];
    --e[y][x];
    return 0;
}

void initialize(int k)
{
    n=k;
    for (int i=0;i<n;++i)
    {
        pt[i]=i;
        sz[i]=1;
    }
    for (int i=0;i<n;++i)
        for (int j=0;j<n;++j)
            e[i][j]=1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...