Submission #581321

#TimeUsernameProblemLanguageResultExecution timeMemory
581321JosiaGame (IOI14_game)C++14
0 / 100
1 ms308 KiB
#include <bits/stdc++.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) { u = find(u); v = find(v); if (u == v) return 0; // return rand()%2; if (chefs[u].connections.size() == 1 || chefs[v].connections.size() == 1) { unite(u, v); return 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...