WA求助
查看原帖
WA求助
374109
Edison688楼主2021/11/17 08:25

WA求助

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
#define ll long long

inline ll read(){
    ll res=0;
    char c=getchar();
    while(!isdigit(c))
        c=getchar();
    while(isdigit(c))
        res=(res<<3)+(res<<1)+(c^48),c=getchar();
    return res;
}

void write(ll x){
    if(x>9)
        write(x/10);
    putchar(x%10+48);
}

ll T,n,h,r;
ll x[N],y[N],z[N];
bool vis[N];
int head[N],idx;
struct edge{
    int v,nxt;
    void add(int _u,int _v){
        v=_v;
        nxt=head[_u];
        head[_u]=idx;
    }
}e[N*N];

ll dissqr(int i,int j){
    return (x[i]-x[j])*(x[i]-x[j])+(z[i]-z[j])*(z[i]-z[j])+(y[i]-y[j])*(y[i]-y[j]);
}

void dfs(int u){
    vis[u]=true;
    for(int i=head[u];i;i=e[i].nxt){
        int v=e[i].v;
        if(!vis[v])dfs(v);
    }
}

int main(){
    T=read();
    while(T--){
        idx=0;
        memset(vis,0,sizeof(vis));
        memset(head,0,sizeof(head));
        memset(e,0,sizeof(e));
        n=read(),h=read(),r=read();
        for(int i=1;i<=n;i++){
            x[i]=read(),y[i]=read(),z[i]=read();
            if(z[i]<=r&&z[i]+r>=0)e[++idx].add(i,0),e[++idx].add(0,i);
            if(z[i]+r>=h&&z[i]-r<=h)e[++idx].add(i,n+1),e[++idx].add(n+1,i);
            for(int j=1;j<i;j++){
                if(4*r*r>=dissqr(i,j))e[++idx].add(i,j),e[++idx].add(j,i);
            }
        }
        dfs(0);
        if(vis[n+1])puts("Yes");
        else puts("No");
    }
}
2021/11/17 08:25
加载中...