Submission #887530

#TimeUsernameProblemLanguageResultExecution timeMemory
887530TahirAliyevGame (IOI14_game)C++17
0 / 100
1 ms348 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int, int> const int MAX = 1505; int N; int par[MAX]; int c; int get(int node){ if(par[node] < 0) return node; return get(par[node]); } stack<array<int, 4>> calls; void unite(int u, int v, bool isTemp){ u = get(u); v = get(v); if(u == v) return; if(-par[u] < -par[v]) swap(u, v); if(isTemp){ calls.push({u, v, par[u], par[v]}); } par[u] += par[v]; par[v] = u; c--; } void rollback(){ while(calls.size()){ auto a = calls.top(); par[a[0]] = a[2]; par[a[1]] = a[3]; c++; calls.pop(); } } void initialize(int n) { memset(par, -1, sizeof(par)); N = n; c = n; } int hasEdge(int u, int v) { if(u > v) swap(u, v); unite(u, v, 1); if(c == 1){ rollback(); return 0; } rollback(); unite(u, v, 0); return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...