Submission #791813

#TimeUsernameProblemLanguageResultExecution timeMemory
791813caganyanmazGame (IOI14_game)C++14
0 / 100
1 ms340 KiB
#include <bits/stdc++.h>
#include "game.h"
using namespace std;



struct Node
{
        int head;
        int tail;
        int size;
        int rcount;
        int nxt;
        Node(int index) : head(index), tail(index), size(1), rcount(0), nxt(-1) {}
        Node() : Node(-1) {}
};

constexpr static int MXSIZE = 1500;
int ans[MXSIZE][MXSIZE];
Node node[MXSIZE];

int n;

void initialize(int nn)
{
        n = nn;
        for (int i = 0; i < n; i++)
                node[i] = Node(i);
        for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                        ans[i][j] = -1;
}


bool needs_friends(int i)
{
        return (n-node[i].size) * node[i].size == node[i].rcount + 1;
}

void merge(int a, int b)
{
        if (node[a].size < node[b].size) swap(a, b);
        node[a].size += node[b].size;
        node[a].rcount += node[b].rcount;
        node[node[a].tail].nxt = b;
        node[a].tail = node[b].tail;
        for (int i = b; i != -1; i = node[i].nxt)
        {
                for (int j = a; j != -1; j = node[j].nxt)
                        if (ans[min(i,j)][max(i,j)] == 0)
                                node[a].rcount--;
                node[i].head = a;
        }
}

int hasEdge(int u, int v)
{
        if (u > v) swap(u, v);
        if ((ans[u][v] == -1) && (node[u].head != node[v].head) && (needs_friends(node[u].head) || needs_friends(node[v].head)))
        {
                merge(node[u].head, node[v].head);
                ans[u][v] = 1;
        }
        else if (ans[u][v] == -1)
        {
                if (node[u].head != node[v].head)
                {
                        node[node[u].head].rcount++;
                        node[node[v].head].rcount++;
                }
                ans[u][v] = 0;
        }
        return ans[u][v];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...