Submission #1244110

#TimeUsernameProblemLanguageResultExecution timeMemory
1244110alexander707070Sphinx's Riddle (IOI24_sphinx)C++20
50 / 100
153 ms1176 KiB
#include<bits/stdc++.h> #define MAXN 307 #include "sphinx.h" using namespace std; int n,m; int color[MAXN]; int li[MAXN],tim; vector<int> v[MAXN]; int query(){ vector<int> w; for(int i=1;i<=n;i++){ w.push_back(color[i]); } return perform_experiment(w); } struct union_find{ int dsu[MAXN]; void init(){ for(int i=1;i<=n;i++)dsu[i]=i; } int root(int x){ if(dsu[x]==x)return x; dsu[x]=root(dsu[x]); return dsu[x]; } void mergev(int x,int y){ int rootx=root(x); int rooty=root(y); dsu[rootx]=rooty; } }graph; void dfs(int x){ li[x]=tim; for(int i:v[x]){ if(li[i]==tim)continue; if((color[i]==n and color[x]==n) or (graph.root(i)==graph.root(x) and color[i]==-1 and color[x]==-1)){ dfs(i); } } } int calc_comps(){ tim++; int c=0; for(int i=1;i<=n;i++){ if(li[i]==tim)continue; c++; dfs(i); } return c; } vector<int> find_colours(int N, vector<int> X, vector<int> Y){ n=N; m=int(X.size()); for(int i=0;i<m;i++){ X[i]++; Y[i]++; v[X[i]].push_back(Y[i]); v[Y[i]].push_back(X[i]); } for(int i=1;i<=n;i++)color[i]=n; graph.init(); for(int i=1;i<=n;i++){ for(int f=1;f<=n;f++)color[f]=n; color[i]=-1; tim++; vector<int> s; for(int f:v[i]){ if(f>i)continue; if(li[graph.root(f)]!=tim){ color[f]=-1; s.push_back(f); } li[graph.root(f)]=tim; } while(!s.empty()){ if(calc_comps()==query())break; int l=0,r=s.size(),tt; while(l+1<r){ tt=(l+r)/2; for(int i=0;i<tt;i++)color[s[i]]=n; if(calc_comps()==query()){ r=tt; }else{ l=tt; } for(int i=0;i<tt;i++)color[s[i]]=-1; } graph.mergev(i,s[l]); while(int(s.size())>l){ color[s.back()]=n; s.pop_back(); } } } vector<int> sol; for(int i=1;i<=n;i++){ sol.push_back(graph.root(i)-1); } return sol; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...