90pts求调
查看原帖
90pts求调
576387
AMlhd楼主2024/9/9 21:24

最后一个点T了

#include <bits/stdc++.h>
using namespace std;

int T;
int n, h, r;
int x[1001],y[1001],z[1001];
int lin[1001][1001];
bool on[1001], under[1001];
int de[1001];
bool book[1001];
bool if_can[1001];
int cnt;
bool flag = false;

double dis(int a, int b) {
    return sqrt(pow(x[a] - x[b], 2) + pow(y[a] - y[b], 2) + pow(z[a] - z[b], 2));
}

bool dfs(int x) {
    if(on[x]) {
        return true;
    }
    if(if_can[x]) {
        return true;
    }
    for(int i = 1; i <= de[x]; ++i) {
        if(book[lin[x][i]]) {
            continue;
        }
        if(on[lin[x][i]]) {
            if_can[x] = true;
            return true;
        }
        else {
            book[lin[x][i]] = true;
            if(dfs(lin[x][i])) {
                if_can[x] = true;
                return true;
            }
            book[lin[x][i]] = false;
        }
    }
    if_can[x] = false;
    return false;
}


int main() {
    cin.tie(0);
    cin >> T;
    while (T--) {
        flag = false;
        memset(on, false, sizeof(on));
        memset(under, false, sizeof(under));
        memset(lin, 0, sizeof(lin));
        memset(de, 0, sizeof(de));
        memset(book, false, sizeof(book));
        memset(if_can, false, sizeof(if_can));
        cin >> n >> h >> r;
        for (int i = 1; i <= n; i++) {
            cin >> x[i] >> y[i] >> z[i];
            if(z[i] + r >= h) {
                on[i] = true;
            }
            if(z[i] - r <= 0) {
                under[i] = true;
            }
        }
        for(int i = 1; i <= n; ++i) {
            cnt = 1;
            for(int j = 1; j <= n; ++j) {
                if(i != j)
                    if(dis(i, j) <= 2 * r) {
                        lin[i][cnt] = j;
                        ++cnt;
                    }
            }
            de[i] = cnt - 1;
        }
        for(int i = 1; i <= n; ++i) {
            if(under[i]) {
                if(dfs(i)) {
                    flag = true;
                    break;
                }
            }
        }
        if(flag) {
            cout << "Yes" << endl;
        }
        else {
            cout << "No" << endl;
        }
    }
    return 0;
}
2024/9/9 21:24
加载中...