Submission #1326849

#TimeUsernameProblemLanguageResultExecution timeMemory
1326849tkm_algorithmsGame (IOI14_game)C++20
0 / 100
0 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; 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); return 1; } u = find(u), v = find(v); cnt[u][v] += 1, cnt[v][u] += 1; if (cnt[u][v] == sz[u]*sz[v]) { unite(u, v); return 1; } return 0; } //void solve() { //} //int32_t main() { //ios_base::sync_with_stdio(0); //cin.tie(0); //solve(); //return 0; //}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...