Submission #1308800

#TimeUsernameProblemLanguageResultExecution timeMemory
1308800LeynaGame (IOI14_game)C++20
100 / 100
205 ms15948 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; vector<int> cnt; int num; set<pair<int, int>> questions; vector<vector<int>> connecting_edges; vector<int> rep, sizes; int find(int u){ if (u == rep[u]) return u; rep[u] = find(rep[u]); return rep[u]; } void uni(int a, int b){ a = find(a); b = find(b); if (a == b) return; if (sizes[a] < sizes[b]) swap(a, b); rep[b] = a; sizes[a] += sizes[b]; } void initialize(int n) { num = n; connecting_edges = vector<vector<int>> (n, vector<int>(n, 1)); for (int i=0; i<n; i++) connecting_edges[i][i] = 0; rep = sizes = vector<int>(n, 1); iota(rep.begin(), rep.end(), 0); } int hasEdge(int u, int v) { u = find(u); v = find(v); if (connecting_edges[u][v] > 1){ // nicht verbinden connecting_edges[u][v]--; connecting_edges[v][u]--; return 0; } else{ // verbinden uni(u, v); int rep_tmp = find(u); for (int i=0; i<num; i++) if (rep[i] == i && i != rep_tmp){ connecting_edges[rep_tmp][i] = connecting_edges[i][rep_tmp] = connecting_edges[u][i] + connecting_edges[v][i]; } return 1; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...