Submission #306740

#TimeUsernameProblemLanguageResultExecution timeMemory
306740tengiz05Game (IOI14_game)C++17
0 / 100
1 ms384 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; struct dsu { int n; int num_of_sets; vector<int> rank; vector<int> par; vector<int> queries_asked; vector<int> size; void init(int _n){ n = _n; num_of_sets = n; par.assign(n, 0); for(int i=0;i<n;i++)par[i] = i; rank.assign(n, 0); size.assign(n, 1); queries_asked.assign(n, 0); } int root(int u){ if(par[u] == u)return u; else return par[u] = root(par[u]); } bool is_same(int u, int v){ return (root(u) == root(v)); } void merge(int u, int v){ u = root(u); v = root(v); if(u == v)return; num_of_sets -- ; if(rank[u] > rank[v]){ rank[u]++; size[u] += size[v]; par[v] = u; }else { rank[v]++; size[v] += size[u]; par[u] = v; } } }s; void initialize(int n) { s.init(n); } int f=0; int hasEdge(int u, int v) { s.queries_asked[u]++; s.queries_asked[v]++; if(f == 0){ f = 1; s.merge(u, v); return 1; } if(s.is_same(u, v)){ return 1; }else { if(s.num_of_sets == 2)return 0; else if(s.queries_asked[u] == s.n-1 || s.queries_asked[v] == s.n-1){ s.merge(u, v); return 1; }else { return 0; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...