Submission #521764

#TimeUsernameProblemLanguageResultExecution timeMemory
521764aintaPark (JOI17_park)C++17
100 / 100
554 ms616 KiB
#include "park.h" #include <cstdio> #include <vector> using namespace std; #define si(x) (int)(x.size()) static int Place[1400], n, fin[1400], chk[1400], U[1400], vi[1400]; static vector<int>E[1400], TP, PP; void Tra(int a){ vi[a]=1; TP.push_back(a); for(auto &t: E[a]){ if(U[t] || vi[t])continue; Tra(t); } } void Go(int rt, int a, int cer){ for(int i=0;i<n;i++)vi[i]=0; TP.clear(); Tra(rt); int m = si(TP); if(!cer){ for(int i=0;i<n;i++)Place[i]=0; for(int i=0;i<m;i++)Place[TP[i]]=1; Place[a] = 1; if(!Ask(min(rt,a),max(rt,a),Place))return; } int b = 1, e = m-1, r = m; while(b<=e){ int mid = (b+e)>>1; for(int i=0;i<n;i++)Place[i]=0; for(int i=0;i<mid;i++)Place[TP[i]]=1; Place[a]=1; if(Ask(min(rt,a),max(rt,a),Place)){ r = mid; e = mid-1; } else b = mid+1; } int x = TP[r-1]; PP.push_back(x); U[x] = 1; for(auto &y : E[x]){ if(!U[y]){ Go(y, a, 0); } } } void Add(int a){ int i; PP.clear(); for(i=0;i<n;i++)U[i]=0; Go(0, a, 1); fin[a] = 1; for(auto &t: PP){ Answer(min(a, t),max(a,t)); E[a].push_back(t); E[t].push_back(a); } } void DFS(int a){ chk[a] = 1; int c = 0; for(int i=0;i<n;i++){ if(chk[i]||fin[i])continue; c++; } int b = 0, e = c, mid, r = -1; while(b<=e){ mid = (b+e)>>1; for(int i=0;i<n;i++){ Place[i] = fin[i]; } int t=0; for(int i=0;i<n;i++){ if(chk[i]||fin[i])continue; if(t<mid){ Place[i] = 1; } t++; } Place[a] = 1; if(Ask(0, a, Place)){ r = mid; e = mid-1; } else b = mid+1; } if(r == 0){ Add(a); return; } else{ int t=0, x = -1; for(int i=0;i<n;i++){ if(chk[i]||fin[i])continue; t++; if(t==r)x = i; } DFS(x); DFS(a); } } void Detect(int T, int N) { n = N; int i; fin[0]=1; for(i=1;i<N;i++){ if(fin[i])continue; DFS(i); } }
#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...