社区讨论

求助犇犇(dfs80)

P3958[NOIP 2017 提高组] 奶酪参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi7rg630
此快照首次捕获于
2025/11/21 02:24
4 个月前
此快照最后确认于
2025/11/21 02:24
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#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);
        }
    }
}


int main()
{
    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;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...