~~0回复惨案~~
by Initialize02 @ 2019-01-21 20:36:37
前排的看我回机房~~打死你~~
by MZ_CXQ @ 2019-01-21 20:37:44
~~可你为什么不直接用并查集纳~~
by kkksx @ 2019-01-21 20:43:15
前排的前来参战
```cpp
#include <bits/stdc++.h>
#define int long long
#define read read()
#define F(i,l,r,op) for(int i = (l); i <= (r);(op))
using namespace std;
const int N = 1005;
int T;
int n,h,r;
int vis[N],z[N],x[N],y[N];
int maps[N][N],st[N];
bool flag;
int read
{
int x = 0,f = 1; char ch = getchar();
while(ch < 48 || ch > 57) {if(ch == '-') f = -1; ch = getchar();}
while(ch >= 48&& ch <= 57) { x = 10 * x + ch - 48; ch = getchar();}
return x * f;
}
bool judge(int i,int j)
{
return (long long)((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) + (z[i] - z[j]) * (z[i] - z[j])) <= (long long)(4 * r * r);
}
void dfs(int cur)
{
if(flag) return;
if(z[cur] + r >= h)
{
flag = 1; return ;
}
F(v,1,n,v++)
{
if(!vis[v] && judge(cur,v))
{
vis[v] = 1;
dfs(v);
}
}
}
#undef int long long
int main()
{
#define long long int
T = read;
while(T--)
{
int cnt = 0; flag = 0;
n = read; h = read; r = read;
memset(vis,0,sizeof(vis));
F(i, 1, n, i++)
{
x[i] = read; y[i] = read; z[i] = read;
if(z[i] <= r && z[i] >= -r) st[++cnt] = i;
}
F(i,1,cnt,i++)
{
dfs(st[i]);
if(flag) break;
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
```
您的问题应该是judge函数写挂了
用个宏可以过
这里并没有转化成long long的
by Edward_Elric @ 2019-01-21 20:48:38