@[Steve_braveman](/space/show?uid=96570) 没细看,发现两个问题
1.
```cpp
void init(){
memset(fa,0,sizeof(fa));//这句干什么?没有用,后面会赋值,应该去掉
for(int i=1;i<=n;i++){
fa[i]=i;
}
}
```
2.
```cpp
for(int y=1;y<=t;y++){
init();//不对吧,先读入n,再初始化
int k=0,p=0;
bool flag1=0;
bool flag2=0;
scanf("%lld%lld%lld",&n,&h,&r);
```
by agicy @ 2018-08-30 16:14:02
@[Steve_braveman](/space/show?uid=96570)
你的代码:
```cpp
void un(ll a,ll b){
ll w=find(a);
ll e=find(b);
fa[b]=a;
}
```
应该是:
```cpp
void un(ll a,ll b){
ll w=find(a);
ll e=find(b);
if(w!=e)
fa[e]=w;
return;
}
```
by agicy @ 2018-08-30 16:19:04
@[卢安来](/space/show?uid=38502) 改了之后更加不对了。。。
by RiverFun @ 2018-08-30 16:26:10
@[Steve_braveman](/space/show?uid=96570) 刚刚对着你的程序改了一遍,没有提交过,你自己看一看。
```cpp
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
ll n,h,r,up[1005],down[1005],fa[1005];
struct sphere{
ll x,y,z;
}a[1005];
ll find(ll a){
if(fa[a]==a) return a;
else return fa[a]=find(fa[a]);
}
void un(ll a,ll b){
ll w=find(a);
ll e=find(b);
if(w!=e)
fa[e]=w;
return;
}
bool chk(sphere a,sphere b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z))<=r*2;//这样更简洁
}
int main(){
int t;
scanf("%d",&t);
for(int y=1;y<=t;y++){
int k=0,p=0;
bool flag1=0;
bool flag2=0;
memset(up,0,sizeof(up)),
memset(down,0,sizeof(down));//你没初始化两个数组
scanf("%lld%lld%lld",&n,&h,&r);
for(int i=1;i<=n;i++){
fa[i]=i;
}//初始化fa数组
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
//a[i].g=i;//存序号干什么?
if((a[i].z+r)>=h){
k++;
up[k]=i;
flag1=1;
}
if((a[i].z-r)<=0){
p++;
//down[k]=i;你写错了吧
down[p]=i;
flag2=1;
}
}
if((flag1==0)||(flag2==0)){
printf("No\n");
continue;
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(chk(a[i],a[j])){
un(i,j);//i,j就是序号
}
}
}
bool lt=0;
for(int i=1;i<=k;i++){
for(int j=1;j<=p;j++){
int aa=find(up[i]);
int bb=find(down[j]);
if(aa==bb){
lt=1;
break;
}
}
if(lt)
break;
}
if(lt){
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}
```
by agicy @ 2018-08-30 16:32:37
@[卢安来](/space/show?uid=38502) 已经A了,谢谢dalao
by RiverFun @ 2018-08-31 18:40:34