Submission #1066604

#TimeUsernameProblemLanguageResultExecution timeMemory
1066604guanexGame (IOI14_game)C++14
100 / 100
246 ms25208 KiB
#include "game.h"
#include<bits/stdc++.h>

using namespace std;

typedef pair<int, int> ii;
typedef long long ll;
typedef pair<long long, long long> pll;
typedef pair<char, int> ci;
typedef pair<string, int> si;
typedef long double ld;
typedef vector<int> vi;
typedef vector<string> vs;
#define pb push_back
#define fi first
#define se second
#define whole(v) v.begin(), v.end()
#define rwhole(v) v.rbegin(), v.rend()
#define inf INT_MAX/2
#define fro front

int len[1501];
int f[1501];
int aris[1501][1501];
int n;

int ffather(int i){
    if(f[i] == i){
        return i;
    }
    return ffather(f[i]);
}

void join(int u, int v){
    u = ffather(u);
    v = ffather(v);
    if(u == v){
        return;
    }
    if(len[u] > len[v]){
        swap(u, v);
    }
    f[u] = v;
    len[v] += len[u];
    for(int i = 1; i <= n; ++i){
        aris[v][i] += aris[u][i];
        aris[i][v] += aris[i][u];
    }
}

void initialize(int N) {
    n = N;
    for(int i = 1; i <= n; ++i){
        f[i] = i;
        len[i] = 1;
    }
}

int hasEdge(int u, int v){
    u++;
    v++;
    u = ffather(u);
    v = ffather(v);
    aris[u][v]++;
    aris[v][u]++;
    if(aris[u][v] == len[u] * len[v]){
        join(u, v);
        return 1;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...