一些很杂的问题 #4
  • 板块灌水区
  • 楼主Guo1
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/7 16:36
  • 上次更新2024/10/7 19:06:43
查看原帖
一些很杂的问题 #4
743879
Guo1楼主2024/10/7 16:36

往期回顾

  • 本帖中,“若认为较大概率继续违规”指的是什么?

  • 同上,“同时可以延长反省期的时限”具体是多长(我有个朋友禁言了我帮他问)?

  • 以及最重要的,听灌多,40分求调

题面

#define R 1001
#include<bits/stdc++.h>
using namespace std;
int T,n,h,r,fa[R],x[R],y[R],z[R];
double dist(double ax,double ay,double az,double bx,double by,double bz)
{
	return (double)(sqrt((double)(ax-bx)*(ax-bx)+(double)(ay-by)*(ay-by)+(double)(az-bz)*(az-bz)));
}
int _find(int s)
{
	int t,k=s;
	while(k!=fa[k]) k=fa[k];
	while(s!=fa[s])
	{
		t=s;
		s=fa[s];
		fa[t]=k;
	}
	return k;
}
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>n>>h>>r;
		for(int i=0;i<=n+1;i++) fa[i]=i;
		for(int i=1;i<=n;i++)
		{
			cin>>x[i]>>y[i]>>z[i];
			if(z[i]-r<=0)//合并底层 
			{
				if(_find(i)!=_find(0))
					fa[_find(i)]=_find(0);
			}
			if(z[i]+r>=h)//合并顶层 
			{
				if(_find(i)!=_find(n+1))
					fa[_find(i)]=_find(n+1);
			}
			for(int j=1;j<i;j++)//合并里面 
			{
				if(2*r>=dist(x[i],y[i],z[i],x[j],y[j],z[j]))
				{
					if(_find(i)!=_find(j))
						fa[_find(i)]=_find(j);
				}
			}
		}
		if(_find(0)==_find(n+1)) cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}
2024/10/7 16:36
加载中...