Submission #420072

#TimeUsernameProblemLanguageResultExecution timeMemory
420072TricksterGame (IOI14_game)C++14
0 / 100
1 ms332 KiB
//Suleyman Atayew

#include "game.h"
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
#include <bitset>
#include <queue>
#include <cmath>
#include <map>
#include <set>
 
#define N 1510
#define ff first
#define ss second
#define pb push_back
#define ll long long
#define mod 1000000007
#define pii pair <int, int>
#define sz(a) (int)(a.size())
ll bigmod(ll a, ll b) { if(b==0)return 1; ll ret = bigmod(a, b/2); return ret * ret % mod * (b%2 ? a : 1) % mod; }

using namespace std;

int D[N][N], arr[N], sz;

void initialize(int n) {
    sz = n;
    
    for(int i = 0; i < n; i++) {
        arr[i] = n-1;
        for(int h = 0; h < n; h++)
            if(i != h) D[i][h] = 1;
    }
}

int hasEdge(int u, int v) {
    if(D[u][v] == 2) return 1;
    if(D[u][v] == 0) return 0;

    arr[u]--, arr[v]--;
    D[u][v] = D[v][u] = 0;

    if(arr[u] == 1) {
        int x = 0;
        for(int i = 0; i < sz; i++) if(D[i][u] == 1) x = i;
        arr[x]--;

        D[x][u] = D[u][x] = 2;

        for(int i = 0; i < sz; i++) {
            if(i == x) continue;

            arr[i] -= D[i][u];

            D[u][i] = D[i][u] = 0;
        }
    }
    if(arr[v] == 1) {
        int x = 0;
        for(int i = 0; i < sz; i++) if(D[i][v] == 1) x = i;
        arr[x]--;

        D[x][v] = D[v][x] = 2;

        for(int i = 0; i < sz; i++) {
            if(i == x) continue;

            arr[i] -= D[i][v];

            D[v][i] = D[i][v] = 0;
        }
    }

    if(arr[u] == 0 || arr[v] == 0)
        return 1;
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...