Submission #152305

#TimeUsernameProblemLanguageResultExecution timeMemory
152305abacabaGame (IOI14_game)C++14
0 / 100
2 ms376 KiB
#include <iostream> #include <stdio.h> #include <assert.h> #include <string.h> #include <stdio.h> #include <algorithm> #include <queue> #include <math.h> #include <random> #include <string> #include <cstring> #include <set> #include <vector> #include <map> using namespace std; #define max3(a, b, c) max(a, max(b, c)) #define min3(a, b, c) min(a, min(b, c)) #define mp make_pair #define f first #define se second #define pb push_back #define ppb pop_back #define ll long long #define ull unsigned long long #define cntbit(x) __builtin_popcount(x) #define endl '\n' #define uset unordered_set #define umap unordered_map #define pii pair<int, int> #define ld long double #define pll pair<long long, long long> const int inf = 2e9; const int N = 2e3 + 15; int n, deg[N], p[N], sz[N], q[N][N]; int find(int v) { if(v == p[v]) return v; return p[v] = find(p[v]); } void unio(int a, int b) { a = find(a); b = find(b); if(a != b) { if(sz[a] < sz[b]) swap(a, b); p[b] = a; sz[a] += sz[b]; for(int i = 0; i < n; ++i) { q[a][find(i)] += q[b][find(i)]; q[find(i)][a] += q[find(i)][b]; } } } 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 = find(u); v = find(v); ++q[u][v], ++q[v][u]; if(q[u][v] == sz[u] * sz[v]) { unio(u, v); return 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...