Submission #996135

#TimeUsernameProblemLanguageResultExecution timeMemory
99613512345678Park (JOI17_park)C++17
0 / 100
1 ms604 KiB
#include "park.h" #include <bits/stdc++.h> using namespace std; const int nx=1500; static int Place[1400]; int n, pa[nx], used[nx], l, r; vector<int> d[nx], x, edg[nx]; int findnode(int u) { int l=0, r=n-1; while (l<r) { int md=(l+r)/2; for (int i=0; i<n; i++) Place[i]=used[i]; for (int i=0; i<=md; i++) Place[i]=1; if (Ask(0, u, Place)) r=md; else l=md+1; } return l; } void solve(int u) { used[u]=1; for (int i=0; i<n; i++) Place[i]=used[i]; if (!Ask(0, u, Place)) { int v=findnode(u); solve(v); solve(u); } else { vector<int> x; for (int i=0; i<n; i++) if (used[i]&&i!=u) x.push_back(i); for (int i=0; i<n; i++) Place[i]=used[i]; for (auto tmp:edg[u]) Place[tmp]=0; Place[u]=1; int l=0, r=x.size()-1; while (l<r) { int md=(l+r)/2; for (int i=0; i<n; i++) Place[i]=0; for (int i=0; i<=md; i++) Place[x[i]]=1; for (auto tmp:edg[u]) Place[tmp]=0; Place[u]=1; if (!Place[0]||Ask(0, u, Place)) r=md; else l=md+1; } Answer(min(x[l], u), max(x[l], u)); edg[u].push_back(x[l]); } } void Detect(int T, int N) { n=N; used[0]=1; for (int i=1; i<N; i++) if (!used[i]) solve(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...