Submission #1326851

#TimeUsernameProblemLanguageResultExecution timeMemory
1326851tkm_algorithms게임 (IOI14_game)C++20
0 / 100
1 ms332 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; using ll = long long; //#define int ll using P = pair<int, int>; #define all(x) x.begin(), x.end() #define rep(i, l, n) for (int i = l; i < (n); ++i) #define sz(x) (int)x.size() const char nl = '\n'; const int mod = 998244353; const int N = 1600; int cnt[N][N], a[N], sz[N]; int nn; int find(int x) { if (a[x] == x)return x; return a[x] = find(a[x]); } void unite(int x, int y) { x = find(x), y = find(y); assert(x != y); a[x] = y, sz[y] += sz[x]; rep(i, 0, nn) cnt[i][y] += cnt[i][x], cnt[y][i] += cnt[i][x]; } mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int rand(int x,int y) { return x + rng() % (y - x + 1); } bool al[N][N]; void initialize(int n) { nn = n; rep(i, 0, n)a[i] = i, sz[i] = 1; for (int i = 0; i < n-1; i += 2) if (i+1 < n)al[i][i+1] = 1; } int c = 0; int hasEdge(int u, int v) { if (u>v)swap(u, v); if(al[u][v]) { unite(u, v); //cout << sz[2] return 1; } int U = u, V = v; u = find(u), v = find(v); cnt[u][v] += 1, cnt[v][u] += 1; //if (U == 0 && V == 2) { //cout << sz[u]*sz[v] << nl; //cout << sz[1] << " " << sz[3] << nl; //} if (cnt[u][v] == sz[u]*sz[v]) { 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...