Submission #159305

#TimeUsernameProblemLanguageResultExecution timeMemory
159305TAISA_Game (IOI14_game)C++14
42 / 100
1093 ms4920 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; int vis[1500][1500]; struct UF { vector<vector<int>> vs; vector<int> par; void build(int n) { vs.resize(n); par.resize(n); for (int i = 0; i < n; i++) { vs[i].push_back(i); par[i] = i; } } bool unite(int u, int v) { if (par[u] == par[v]) { vis[u][v] = 1; vis[v][u] = 1; return false; } int tu = u, tv = v; u = par[tu]; v = par[tv]; int su = vs[u].size(), sv = vs[v].size(); if (su < sv) { swap(u, v); swap(su, sv); } int co = 0; for (int i = 0; i < su; i++) { for (int j = 0; j < sv; j++) { if (vis[vs[u][i]][vs[v][j]]) { co++; } } } vis[tu][tv] = 1; vis[tv][tu] = 1; if (co + 1 == su * sv) { for (auto e : vs[v]) { vs[u].push_back(e); par[e] = u; } return true; } return false; } }; UF uf; void initialize(int n) { uf.build(n); } int hasEdge(int u, int v) { if (uf.unite(u, v)) { return 1; } else { return 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...