Submission #1277078

#TimeUsernameProblemLanguageResultExecution timeMemory
1277078crispxxGame (IOI14_game)C++20
100 / 100
200 ms16024 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; // #define int long long #define all(x) x.begin(), x.end() #define pb push_back #define ar array #define nl '\n' const int N = 1500; int s[N][N], d[N]; vector<int> lst[N]; int n; void initialize(int m) { n = m; for(int i = 0; i < n; i++) { d[i] = i; lst[i].clear(); lst[i].pb(i); for(int j = 0; j < n; j++) { if(i != j) s[i][j] = 1; } } } bool merge(int u, int v) { u = d[u], v = d[v]; if(u == v) return false; if(lst[u].size() < lst[v].size()) swap(u, v); if(s[u][v] > 1) { s[u][v]--; s[v][u]--; return false; } else { for(auto &x : lst[v]) { d[x] = u; lst[u].pb(x); } for(int x = 0; x < n; x++) { if(x == d[x] && x != u && x != v) { int t = s[u][x] + s[v][x]; s[u][x] = s[x][u] = t; } } return true; } } int hasEdge(int u, int v) { return merge(u, v); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...