제출 #1016801

#제출 시각아이디문제언어결과실행 시간메모리
1016801serkanrashid게임 (IOI14_game)C++14
100 / 100
222 ms26468 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1501;

int n;
int br[maxn][maxn];
int lead[maxn],sz[maxn];

void initialize(int N)
{
    n = N;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(i!=j) br[i][j] = 1;
        }
    }
    for(int i = 0; i < n; i++) lead[i] = i;
    for(int i = 0; i < n; i++) sz[i] = 1;
}

int find_lead(int x)
{
    if(lead[x]==x) return x;
    return lead[x] = find_lead(lead[x]);
}

int hasEdge(int u, int v)
{
    u = find_lead(u);
    v = find_lead(v);
    br[u][v]--;
    br[v][u]--;
    if(!br[u][v])
    {
        if(sz[u]>sz[v]) swap(u,v);
        sz[v] += sz[u];
        lead[u] = v;
        for(int i = 0; i < n; i++)
        {
            if(i==v||i==u) continue;
            br[v][i] += br[u][i];
            br[i][v] += br[i][u];
            br[u][i] = br[i][u] = 0;
        }
        return 1;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...