1. 程式人生 > >【NOIP2017提高組 day2】乳酪

【NOIP2017提高組 day2】乳酪

題目

在這裡插入圖片描述
在這裡插入圖片描述


題解

–很簡單,就是n^2建圖,bfs一遍就好了,記得開longlong


程式碼

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN=1005;

int t,n;
long long h,r;
long
long x[MAXN],y[MAXN],z[MAXN]; vector<int>g[MAXN]; int q[MAXN],head,tail; bool isv[MAXN]; long long f(long long a){ return a*a; } long long l(int a,int b){ return f(x[a]-x[b])+f(y[a]-y[b])+f(z[a]-z[b]); } bool bfs(){ head=1; tail=1; q[head]=0; isv[0]=1; while(head<=tail){ int x=q[
head]; if(x==n+1) return 1; for(int i=0;i<g[x].size();i++){ int y=g[x][i]; if(!isv[y]){ q[++tail]=y; isv[y]=1; } } head++; } return 0; } int main(){ // freopen("cheese.in","r",stdin); // freopen("cheese.out","w",stdout); cin>>t; while(t--){ scanf("%d%lld%lld",&
n,&h,&r); for(int i=0;i<=n+1;i++) g[i].clear(); for(int i=1;i<=n;i++){ scanf("%lld%lld%lld",&x[i],&y[i],&z[i]); for(int j=1;j<i;j++) if(l(i,j)<=4*r*r){ g[i].push_back(j); g[j].push_back(i); } if(z[i]<=r){ g[0].push_back(i); g[i].push_back(0); } if(z[i]+r>=h){ g[n+1].push_back(i); g[i].push_back(n+1); } } memset(isv,0,sizeof(isv)); if(bfs()) printf("Yes\n"); else printf("No\n"); } return 0; }