Submission #959686

#TimeUsernameProblemLanguageResultExecution timeMemory
959686vjudge1Game (IOI14_game)C++17
15 / 100
18 ms844 KiB
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math,inline") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,lzcnt,mmx,abm,avx,avx2,fma") #include "game.h" #include <bits/stdc++.h> using namespace std; const int N = 1500; int n, sum, deg[N], cnt[N]; unordered_set<int> vis, adj[N]; void dfs(int x, int k) { vis.insert(x); sum++; if (sum > k) return; for (int y : adj[x]) { if (vis.find(y) != vis.end()) continue; dfs(y, k); if (sum > k) return; } } void initialize(int NN) { n = NN; memset(cnt, 0, sizeof(cnt)); for (int i = 0; i < n; i++) { deg[i] = n; cnt[n]++; } for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { adj[i].insert(j); adj[j].insert(i); } } } int hasEdge(int u, int v) { adj[u].erase(v); adj[v].erase(u); deg[u]--; deg[v]--; cnt[deg[u]]++; cnt[deg[v]]++; if (cnt[deg[u]] >= deg[u]) { vis.clear(); sum = 0; dfs(u, cnt[deg[u]]); if (sum <= cnt[deg[u]] && sum < n) { cnt[deg[u]]--; cnt[deg[v]]--; deg[u]++; deg[v]++; adj[u].insert(v); adj[v].insert(u); return 1; } } if (cnt[deg[v]] >= deg[v]) { vis.clear(); sum = 0; dfs(v, cnt[deg[v]]); if (sum <= cnt[deg[v]] && sum < n) { cnt[deg[u]]--; cnt[deg[v]]--; deg[u]++; deg[v]++; adj[u].insert(v); adj[v].insert(u); return 1; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...