AT_abc304_c的題解

Jerry_heng發表於2024-03-28

(一)

這題,可以用一種類似於 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;
}