Submission #581327

#TimeUsernameProblemLanguageResultExecution timeMemory
581327JosiaGame (IOI14_game)C++14
0 / 100
1 ms312 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; // #define int int64_t int N; struct chefNode { int chef; set<pair<int, int>> connections; }; vector<chefNode> chefs; void initUnionfind(int n) { chefs.clear(); chefs.resize(n); for (int i = 0; i<n; i++) { chefNode x; x.chef = i; for (int j = 0; j<n; j++) { if (i == j) continue; x.connections.insert({i, j}); } chefs[i] = x; } } int find(int x) { if (chefs[x].chef == x) return x; return chefs[x].chef = find(chefs[x].chef); } void unite(int a, int b) { a = find(a); b = find(b); if (a == b) return; chefs[a].chef = b; for (auto i: chefs[a].connections) chefs[b].connections.insert(i); chefs[a].connections.clear(); set<pair<int, int>> newConnections; for (auto i: chefs[b].connections) if (find(i.first) != find(i.second)) newConnections.insert(i); chefs[b].connections = newConnections; } void initialize(int n) { N = n; initUnionfind(n); } int hasEdge(int u, int v) { if (find(u) == find(v)) return 0; // return rand()%2; if (chefs[find(u)].connections.size() == 1 || chefs[find(v)].connections.size() == 1) { unite(find(u), find(v)); return 1; } chefs[find(u)].connections.erase({u, v}); chefs[find(v)].connections.erase({v, u}); return 0; } // signed main() { // int n; cin >> n; // initialize(n); // for (int i = 0; i<(n*(n-1))/2; i++) { // int u, v; cin >> u >> v; // cout << hasEdge(u, v) << "\n"; // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...