Submission #1062992

#TimeUsernameProblemLanguageResultExecution timeMemory
1062992Charizard2021Game (IOI14_game)C++17
15 / 100
1 ms616 KiB
#include "game.h"
#include<bits/stdc++.h>
using namespace std;
struct DSU {
	vector<int> e;
	DSU(int N) { e = vector<int>(N, -1); }

	// get representive component (uses path compression)
	int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); }

	bool same_set(int a, int b) { return get(a) == get(b); }

	int size(int x) { return -e[get(x)]; }

	bool unite(int x, int y) {  // union by size
		x = get(x), y = get(y);
		if (x == y) return false;
		if (e[x] > e[y]) swap(x, y);
		e[x] += e[y]; e[y] = x;
		return true;
	}
};
vector<vector<int> > counter;
DSU dsu(81);
void initialize(int n) {
    counter.resize(1 + n, vector<int>(1 + n, 0));
}

int hasEdge(int u, int v) {
    u = dsu.get(u);
    v = dsu.get(v);
    counter[u][v]++;
    counter[v][u]++;
    if(counter[u][v] == dsu.size(u) * dsu.size(v)){
        dsu.unite(u, v);
        return 1;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...