제출 #1168025

#제출 시각아이디문제언어결과실행 시간메모리
1168025SeungniGame (IOI14_game)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>
#include "game.h"

using namespace std;
using ll = long long;
using pii = pair<int, int>;

int N;
int par[3005];
int cnt[3005][3005];

int find(int a)
{
    if (par[a] == a) return par[a];
    else return par[a] = find(par[a]);
}

void merge(int a, int b)
{
    a = find(a), b = find(b);
    if (a == b) return;

    cnt[a][b] = 0, cnt[b][a] = 0;

    set <int> v;
    for (int i = 1; i <= N; i++)
    {
        int t = find(i);
        v.insert(t);
    }

    v.erase(a);
    v.erase(b);

    for (int i : v)
    {
        cnt[a][i] += cnt[b][i];
        cnt[i][a] += cnt[b][i];
    }

    par[b] = a;

    return;
}

void initialize(int n)
{
    for (int i = 1; i <= n; i++) par[i] = i;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++) cnt[i][j] = 1;
    }
}

int hasEdge(int u, int v)
{
    u = find(u), v = find(v);

    if (cnt[u][v] == 1)
    {
        merge(u, v);
        return 1;
    }
    else
    {
        cnt[u][v]--;
        cnt[v][u]--;
        return 0;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...