Submission #1231432

#TimeUsernameProblemLanguageResultExecution timeMemory
1231432LucaIlieGame (IOI14_game)C++20
42 / 100
1095 ms1172 KiB
#include "game.h" #include <vector> using namespace std; const int MAX_N = 1500; int n; bool ap[MAX_N][MAX_N]; vector<pair<int, int>> edges; struct DSU { int comp; vector<int> parent; void init(int n) { parent.clear(); parent.resize(n); for (int v = 0; v < n; v++) parent[v] = v; comp = n; } int findParent(int v) { if (parent[v] != v) parent[v] = findParent(parent[v]); return parent[v]; } void connect(int u, int v) { u = findParent(u); v = findParent(v); if (u == v) return; comp--; parent[u] = v; } }; void initialize(int N) { n = N; edges.clear(); for (int u = 0; u < n; u++) { for (int v = u + 1; v < n; v++) ap[u][v] = false; } } int hasEdge(int u, int v) { ap[u][v] = ap[v][u] = true; DSU dsu; dsu.init(n); for (auto e: edges) dsu.connect(e.first, e.second); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (ap[i][j]) continue; dsu.connect(i, j); } } if (dsu.comp == 1) return 0; edges.push_back({u, v}); return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...