萌新求助,80分WA
查看原帖
萌新求助,80分WA
284855
lihaochen_harold楼主2020/8/12 16:10
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n,h,x[1009],y[1009],z[1009],id[1009];
ll r;
vector<string>ans;
ll dist(int x1,int x2,int y1,int y2,int z1,int z2){
	ll p1=(x1-x2)*(x1-x2);
	ll p2=(y1-y2)*(y1-y2);
	ll p3=(z1-z2)*(z1-z2);
	return p1+p2+p3;
}
int root(int x){
	if(id[x]==x)return x;
	return id[x]=root(id[x]);
}
void unite(int x,int y){
	id[root(x)]=root(y);
}
int main()
{
	cin>>t;
	while(t--){
		cin>>n>>h>>r;
		for(int i=0;i<=n+1;i++){
			id[i]=i;
		}
		for(int i=1;i<=n;i++){
			cin>>x[i]>>y[i]>>z[i];
		}
		for(int i=1;i<=n;i++){
			if(z[i]-r<=0)unite(i,0);
			if(z[i]+r>=h)unite(i,n+1);
			for(int j=i+1;j<=n;j++){
				if(dist(x[i],x[j],y[i],y[j],z[i],z[j])<=4*r*r)
					unite(i,j);
			}
		}
		if(root(0)==root(n+1))ans.push_back("Yes");
		else ans.push_back("No");
	}
	for(int i=0;i<ans.size();i++)cout<<ans[i]<<endl;
	return 0;
}

请各位大佬帮忙看一下,谢谢~

2020/8/12 16:10
加载中...