AT_abc304_c的题解

(一)

这题,可以用一种类似于 BFS 的方法。

一开始,先把 \(1\) 号点放入队列。

\(head\)\(tail\) 记录当前未处理的头和尾。

对于每一个点,查找符合的点,放入队列。

(二)

AC 代码。

#include<bits/stdc++.h>
using namespace std;
int n,d,x[2001],y[2001],a[20001];
bool vis[2001];
int js(int p,int q){
	return (x[p]-x[q])*(x[p]-x[q])+(y[p]-y[q])*(y[p]-y[q]);
}
int main(){
	int head=0,tail=1;
	cin>>n>>d;
	for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
	vis[1]=1;
	a[1]=1;
	while(head<tail){
		head++;
		for(int i=1;i<=n;i++){
			if(vis[i])continue;
			if(js(i,a[head])<=d*d){
				vis[i]=1;
				a[++tail]=i;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(vis[i])cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}
posted @ 2024-03-28 08:21  Jerry_heng  阅读(7)  评论(0编辑  收藏  举报