求助犇犇(dfs80)

P3958 [NOIP2017 提高组] 奶酪

~~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


|