一直改来改去老是说我re,我寻思着我数组也没越界啊
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct d
{
int x, y, z;
};
int fa[1001];
d a[1001];
int n, h, r;
bool judge(d a, d b)
{
return b.z > a.z;
}
bool touch(int x, int y)
{
if (sqrt(pow(a[x].x - a[y].x, 2) + pow(a[x].y - a[y].y, 2) + pow(a[x].z - a[y].z, 2)) <= 2 * r)
return 1;
else return 0;
}
int refa(int x)
{
if (fa[x] == x)
return x;
else return refa(fa[x]);
}
void ad(int x, int y)
{
int x1 = refa(x);
int y1 = refa(y);
fa[y1] = x1;
}
unsigned main()
{
int t;cin >> t;
while (t--)
{
int top1=0, low1=0;
cin >> n >> h >> r;
int sign = 0;
for (int i = 1;i <= n;i++)
{
cin >> a[i].x >> a[i].y >> a[i].z;
if (a[i].z + r >= h)top1++;
if (a[i].z - r <= 0)low1++;
if (a[i].z + r >= h && a[i].z - r <= 0)
{
sign = 1;
cout << "Yes" << "\n";
break;
}
}
if (sign)continue;
for (int i = 1;i <= n;i++)
fa[i] = i;
sort(a + 1, a + 1 + n, judge);
for (int i = 1;i <= n;i++)
{
for (int j = 1;j < i;j++)
{
if (touch(i, j))
{
ad(j, i);
if (n - i < top1 && refa(i) <= low1)
{
cout << "Yes" << "\n";
sign = 1;
}
break;
}
}
if (sign)break;
}
if (!sign)cout << "No" << "\n";
}
}