Submission #1129004

#TimeUsernameProblemLanguageResultExecution timeMemory
1129004djs100201Game (IOI14_game)C++20
42 / 100
1091 ms35816 KiB
#include <bits/stdc++.h> #include "game.h" #define all(v) v.begin(), v.end() using namespace std; using ll = long long; const ll n_ = 2e3 + 100; ll checked[n_], con[n_][n_], N, par[n_]; vector<ll> v[n_]; ll find(ll x) { if (par[x] < 0) return x; return par[x] = find(par[x]); } void merge(ll x, ll y) { x = find(x), y = find(y); if (v[x].size() < v[y].size()) swap(x, y); for (auto nxt : v[y]) v[x].push_back(nxt); v[y].clear(); par[y] = x; } void initialize(int n) { N = n; memset(con, -1, sizeof(con)); memset(par, -1, sizeof(par)); for (int i = 1; i <= n; i++) { v[i].clear(); v[i].push_back(i); } } bool go(ll x, ll y) { ll cnt = 0; x = find(x), y = find(y); for (auto i : v[x]) for (auto j : v[y]) { if (con[i][j] == -1) cnt++; if (con[j][i] == -1) cnt++; } return cnt == 2; } int hasEdge(int u, int v) { u++, v++; if (go(u, v)) { con[u][v] = con[v][u] = 1; merge(u,v); } else con[u][v] = con[v][u] = 0; return con[u][v]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...