Submission #29807

#TimeUsernameProblemLanguageResultExecution timeMemory
29807nibnalinGame (IOI14_game)C++14
100 / 100
593 ms19672 KiB
#include <iostream> #include <cstdio> #include <vector> #include <set> #include "game.h" using namespace std; const int maxn = 1505; int n, P[maxn], sz[maxn], ctr[maxn][maxn]; inline int root(int x) { return ((P[x] == x)?x:(P[x] = root(P[x]))); } void dsu(int x, int y) { x = root(x), y = root(y); if(sz[x] < sz[y]) swap(x, y); P[y] = x; sz[x] += sz[y]; for(int i = 0;i < n;i++) { int a = min(i, x), b = max(i, x); ctr[a][b] = ctr[min(i, x)][max(i, x)]+ctr[min(i, y)][max(i, y)]; } } void initialize(int _N) { n = _N; for(int i = 0;i < n;i++) { P[i] = i, sz[i] = 1; } } int hasEdge(int u, int v) { u = root(u), v = root(v); if(u == v) return 0; if(u > v) swap(u, v); ctr[u][v]++; //cout << u << " " << v << " " << ctr[u][v] << " " << sz[u] << " " << sz[v] << "\n"; if(ctr[u][v] == sz[u]*sz[v]) { dsu(u, v); return 1; } else return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...