Submission #594584

# Submission time Handle Problem Language Result Execution time Memory
594584 2022-07-12T17:21:33 Z Koosha_mv Park (JOI17_park) C++14
67 / 100
439 ms 712 KB
#include "park.h"
#include <bits/stdc++.h>
using namespace std;
#define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl
#define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl
#define erorp(x) cout<<#x<<"={"<<x.F<<" , "<<x.S<<"}"<<endl
#define eror(x) cout<<#x<<'='<<(x)<<endl
#define f_(i,a,b) for(int i=a;i>=b;i--)
#define f(i,a,b) for(int i=a;i<b;i++)
#define nb(x) __builtin_popcount(x)
#define all(v) v.begin(),v.end()
#define bit(n,k) (((n)>>(k))&1)
#define Add(x,y) x=(x+y)%mod
#define maxm(a,b) a=max(a,b)
#define minm(a,b) a=min(a,b)
#define lst(x) x[x.size()-1]
#define sz(x) int(x.size())
#define mp make_pair
#define ll long long
#define pb push_back
#define S second
#define F first

const int N=1505;

mt19937 rng(time(nullptr));

int n,par[N],vis[N],mark[N],place[N];
vector<int> g[N];

void reset(){
	f(i,0,n) place[i]=0;
}
int rand(int l,int r){
	uniform_int_distribution<int> rnd(l,r-1);
	return rnd(rng);
}
int ask(int s,int t){
	if(s>t) swap(s,t);
	int res=Ask(s,t,place);
	return res;
}
void path(int s,int t,vector<int> vec){
	if(vec.size()==0){
		if(s>t) swap(s,t);
		//cout<<s<<" -> "<<t<<endl;
		Answer(s,t);
		g[s].pb(t);
		g[t].pb(s);
		return ;
	}
	int id=vec[rand(0,vec.size())];
	reset();
	place[s]=place[t]=1;
	for(auto x : vec){
		place[x]=1;
	}
	vector<int> L,R;
	for(auto x : vec){
		if(x==id) continue ;
		place[x]=0;
		if(ask(s,id)==0) L.pb(x);
		else R.pb(x);
		place[x]=1;
	}
	path(s,id,L);
	path(id,t,R);
}
void dfs1(int u,int p,vector<int> &vec){
	vis[u]=1;
	par[u]=p;
	vec.pb(u);
	for(auto v : g[u]){
		if(v==p || vis[v]) continue ;
		par[u]=v;
		dfs1(v,u,vec);
	}
}
void solve(int x,int u){
	vector<int> vec;
	dfs1(u,u,vec);
	reset();
	place[x]=1;
	for(auto i : vec) place[i]=1;
	if(ask(x,vec[0])==0) return ;
	int l=0,r=vec.size();
	while(l+1<r){
		int mid=(l+r)>>1;
		f(i,0,vec.size()) place[vec[i]]=(i<mid);
		if(ask(x,vec[0])==1) r=mid;
		else l=mid;
	}	
	vis[vec[l]]=1;
	for(auto i : g[vec[l]]){
		if(vis[i]==1 || par[vec[l]]==i) continue ;
		solve(x,i);
	}
	if(l>0){
		solve(x,u);
	}
	Answer(min(x,vec[l]),max(x,vec[l]));
}
void do_it(int x){
	for(auto u : g[x]){
		vis[u]=1;
		for(auto v : g[u]){
			if(v==x) continue ;
			solve(x,v);
		}
	}
}

void Detect(int T, int _n) {
	n=_n;
	mark[0]=1;
	vector<int> B(1);
	f(i,1,n){
		if(mark[i]) continue ;
		vector<int> vec,A;
		mark[i]=1;
		f(j,0,n) if(!mark[j]) A.pb(j);
		int l=-1,r=A.size();
		while(1){
			while(l+1<r){
				int mid=(l+r)>>1;
				reset();
				vector<int> p;
				fill(vis,vis+n,0);
				dfs1(0,0,p);
				place[0]=place[i]=1;
				for(auto x : p) place[x]=1;
				f(j,0,mid) place[A[j]]=1;
				f(j,mid,A.size()) place[A[j]]=mark[A[j]];
				if(ask(0,i)==0){
					l=mid;
				}
				else{
					r=mid;
				}
			}
			if(l==-1) break;
			mark[A[l]]=1;
			vec.pb(A[l]);
			r=l,l=-1;
		}
		reset();
		vector<int> p;
		fill(vis,vis+n,0);
		dfs1(0,0,p);
		place[i]=1;
		for(auto x : vec) place[x]=1;
		l=0,r=p.size();
		while(l+1<r){
			int mid=(l+r)>>1;
			f(j,0,p.size()) place[p[j]]=(j<mid);
			if(ask(0,i)==0) l=mid;
			else r=mid;
		}
		//cout<<endl<<i<<" : "<<endl;
		//eror(p[l]);
		//dbgv(p);
		//dbgv(vec);
		path(p[l],i,vec);
	}
	f(i,0,n){
		//do_it(i);
	}
}
/*
1
5 4
0 3
3 4
3 1
0 2

1 
7 6
0 3
0 5
3 4
3 1
5 2
5 6
1 2

*/

Compilation message

park.cpp: In function 'void solve(int, int)':
park.cpp:9:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 | #define f(i,a,b) for(int i=a;i<b;i++)
......
   89 |   f(i,0,vec.size()) place[vec[i]]=(i<mid);
      |     ~~~~~~~~~~~~~~             
park.cpp:89:3: note: in expansion of macro 'f'
   89 |   f(i,0,vec.size()) place[vec[i]]=(i<mid);
      |   ^
park.cpp: In function 'void Detect(int, int)':
park.cpp:9:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 | #define f(i,a,b) for(int i=a;i<b;i++)
......
  133 |     f(j,mid,A.size()) place[A[j]]=mark[A[j]];
      |       ~~~~~~~~~~~~~~           
park.cpp:133:5: note: in expansion of macro 'f'
  133 |     f(j,mid,A.size()) place[A[j]]=mark[A[j]];
      |     ^
park.cpp:9:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 | #define f(i,a,b) for(int i=a;i<b;i++)
......
  155 |    f(j,0,p.size()) place[p[j]]=(j<mid);
      |      ~~~~~~~~~~~~              
park.cpp:155:4: note: in expansion of macro 'f'
  155 |    f(j,0,p.size()) place[p[j]]=(j<mid);
      |    ^
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 262 ms 548 KB Output is correct
2 Correct 310 ms 684 KB Output is correct
3 Correct 257 ms 648 KB Output is correct
4 Correct 236 ms 624 KB Output is correct
5 Correct 245 ms 548 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 358 ms 584 KB Output is correct
2 Correct 390 ms 464 KB Output is correct
3 Correct 412 ms 488 KB Output is correct
4 Correct 370 ms 580 KB Output is correct
5 Correct 386 ms 604 KB Output is correct
6 Correct 385 ms 712 KB Output is correct
7 Correct 386 ms 584 KB Output is correct
8 Correct 387 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 196 ms 452 KB Output is correct
2 Correct 417 ms 480 KB Output is correct
3 Correct 439 ms 604 KB Output is correct
4 Correct 356 ms 496 KB Output is correct
5 Correct 376 ms 644 KB Output is correct
6 Correct 344 ms 508 KB Output is correct
7 Correct 289 ms 468 KB Output is correct
8 Correct 397 ms 492 KB Output is correct
9 Correct 383 ms 468 KB Output is correct
10 Correct 392 ms 520 KB Output is correct
11 Correct 402 ms 468 KB Output is correct
12 Correct 407 ms 500 KB Output is correct
13 Correct 325 ms 520 KB Output is correct
14 Correct 397 ms 536 KB Output is correct
15 Correct 319 ms 472 KB Output is correct
16 Correct 426 ms 600 KB Output is correct
17 Correct 186 ms 632 KB Output is correct
18 Correct 376 ms 536 KB Output is correct
19 Correct 303 ms 520 KB Output is correct
20 Correct 367 ms 464 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 435 ms 500 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -