求大佬帮忙,30分
查看原帖
求大佬帮忙,30分
408807
type19楼主2021/8/13 10:43

救救孩子吧

#include <bits/stdc++.h>
using namespace std;

struct Ball{
	int x,y,z;
}ball[1005];

int fa[1005],lvl[1005];

int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}

void merge(int x,int y){
	int fx=find(x),fy=find(y);
	if(lvl[fx]<lvl[fy]){
		fa[fx]=fy;
	}
	else{
		if(lvl[fx]==lvl[fy]&&fx!=fy) lvl[fx]++;
		fa[fy]=fx;
	}
}

int main(){
	int t;
	cin>>t;
	for(int g=0;g<t;g++){
		int n,h,r;
		cin>>n>>h>>r;
		for(int i=1;i<=n;i++){
			cin>>ball[i].x>>ball[i].y>>ball[i].z;
		}
		for(int i=0;i<=n+1;i++){
			fa[i]=i;
			lvl[i]=1;
		}
		ball[n+1].z=h;
		for(int i=1;i<=n;i++){
			for(int j=i+1;j<=n;j++){
				double dis=sqrt(pow((ball[i].x-ball[j].y),2)+pow((ball[i].y-ball[j].y),2)+pow((ball[i].z-ball[j].y),2));
				if(dis<=2*r) merge(i,j);
			}
			if(ball[i].z-r<=0) merge(0,i);
			if(ball[i].z+r>=h) merge(i,n+1);
		}
		int fx=find(0),fy=find(n+1);
		if(fx==fy) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}
2021/8/13 10:43
加载中...