Submission #95279

#TimeUsernameProblemLanguageResultExecution timeMemory
95279jangwonyoungPark (JOI17_park)C++14
100 / 100
482 ms888 KiB
#include "park.h" #include<iostream> #include<queue> using namespace std; #define pb push_back //const int N=1401,M=1501; int n; vector<int>qry; //int qar[1501]; vector<int>adj[1501]; vector<int>ds[1501]; int d[1501]; bool in[1501]; int tzuyu(int s,int e){ int qar[n]; for(int i=0; i<n ;i++) qar[i]=0; for(auto cur:qry) qar[cur]=1; if(s>e) swap(s,e); int res=Ask(s,e,qar); qry.clear();qry.shrink_to_fit(); return res; } void add(int x,int y){ adj[x].pb(y);adj[y].pb(x); Answer(min(x,y),max(x,y)); } vector<int>g;vector<int>h; bool vis[1501]; int bs(int s,int e){ if(h.size()>1){ for(auto cur:h) qry.pb(cur); int ret=tzuyu(s,e); if(ret){ g.clear();g.shrink_to_fit();h.clear();h.shrink_to_fit(); return -1; } } int l=0,r=g.size()-(h.size()!=1); while(l!=r){ int mid=(l+r)/2; for(auto cur:h) qry.pb(cur); for(int i=0; i<=mid ;i++) qry.pb(g[i]); int res=tzuyu(s,e); if(res) r=mid; else l=mid+1; } if(l==g.size()){ g.clear();g.shrink_to_fit();h.clear();h.shrink_to_fit(); return -1; } int res=g[l]; g.clear();g.shrink_to_fit();h.clear();h.shrink_to_fit(); return res; } vector<int>v; void expand(int x){ in[x]=true; for(int i=0; i<n ;i++) if(in[i]) h.pb(i); for(int i=0; i<n ;i++) if(!in[i]) g.pb(i); int res=bs(0,x); in[res]=true; if(res==-1){ v.push_back(x); return; } expand(res); expand(x); } bool vis2[1501]; void dfs(int id){ g.push_back(id); vis2[id]=true; for(auto cur:adj[id]){ if(in[cur] && !vis[cur] && !vis2[cur]) dfs(cur); } } void explode(int id,int x){ for(int i=0; i<n ;i++) vis2[i]=false; h.pb(id); dfs(x); int res=bs(id,x); if(res==-1) return; add(res,id); vis[res]=true; for(auto cur:adj[res]){ if(in[cur] && !vis[cur]) explode(id,cur); } } void addnode(int id){ for(int i=0; i<n ;i++) vis[i]=!in[i]; v.clear(); expand(id); for(int i=1; i<v.size() ;i++) add(v[i-1],v[i]); for(int i=0; i<v.size() ;i++) in[v[i]]=false; explode(v[0],0); for(int i=0; i<v.size() ;i++) in[v[i]]=true; } void Detect(int T, int N){ n=N; in[0]=true; for(int i=1; i<n ;i++){ if(!in[i]) addnode(i); } }

Compilation message (stderr)

park.cpp: In function 'int bs(int, int)':
park.cpp:48:6: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(l==g.size()){
     ~^~~~~~~~~~
park.cpp: In function 'void addnode(int)':
park.cpp:94:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=1; i<v.size() ;i++) add(v[i-1],v[i]);
               ~^~~~~~~~~
park.cpp:95:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v.size() ;i++) in[v[i]]=false;
               ~^~~~~~~~~
park.cpp:97:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v.size() ;i++) in[v[i]]=true;
               ~^~~~~~~~~
#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...