0pts求调,#1,2WA MLE剩下的
查看原帖
0pts求调,#1,2WA MLE剩下的
1009001
HCA_ac_life楼主2024/10/2 20:36
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read(){
	ll a=0;int f=0;char p=getchar();
	while(!isdigit(p)){f|=p=='-';p=getchar();}
	while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=getchar();}
	return f?-a:a;
}
struct ball{ll x,y,z;}b[1001];
vector<int>edge[1001];
ll t,n,h,r;
bool vis[1005];
void add(){
	ll rx=2*r;
	memset(vis,0,sizeof(vis));
	for(int i=0;i<=1001;++i)edge[i].clear();
	for(int i=1;i<=n;++i){
		if(b[i].z-r<=0)edge[0].push_back(i);
		else if(b[i].z+r>=h)edge[i].push_back(n+1);
		for(int j=i+1;j<=n;++j){
			if(i==j)continue;
			if(abs(b[i].x-b[j].x)<=rx&&abs(b[i].y-b[j].y)<=rx&&abs(b[i].z-b[j].z)<=rx){
				edge[i].push_back(j);
				edge[j].push_back(i);
			}	
		}
	}
}
bool f;
void dfs(ll now){
	vis[now]=1;
	if(f)return;
	if(now==n+1){
		f=1;
		return;
	}
	for(auto i:edge[now]){
		if(!vis[i])
			dfs(i);
		vis[i]=0;
	} 
}
void test(){
	cout<<endl;
	for(int i=0;i<=n;++i){
		cout<<i<<":";
		for(auto j:edge[i])cout<<j<<" ";
		cout<<endl;
	}
	cout<<endl;
} 
int main(){
	t=read();
	while(t--){
		n=read();h=read();r=read();
		for(int i=1;i<=n;++i){
			ll x,y,z;
			x=read();y=read();z=read();
			b[i]=(ball){x,y,z};
		}
		add();
		//test();
		f=0;
		dfs(0);
		if(f)puts("Yes");
		else puts("No");
	}
	return 0;
}
2024/10/2 20:36
加载中...