```cpp
#include<bits/stdc++.h>
using namespace std;
struct Tree{
int id;
double dist;
bool operator <(const Tree&x)const{
return dist>x.dist;
}
}d;
struct ZYZ{int x,y;}tre[1010];
double a[1010][1010],dis[1010],jump[510],Max,cnt;
int vis[1010],n,m;
priority_queue<Tree> q;
bool cmp(double a,double b){return a>b;}
double getdist(double x1,double x2,double y1,double y2){return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);}
int main(){
scanf("%d",&m);
for(int i=1;i<=m;i++) scanf("%lf",&jump[i]);
sort(jump+1,jump+1+m,cmp);
for(int i=0;i<1010;i++)dis[i]=0x3f3f3f3f;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&tre[i].x,&tre[i].y);
for(int j=1;j<i;j++){
double far=getdist(tre[i].x,tre[j].x,tre[i].y,tre[j].y);
a[i][j]=far;
a[j][i]=far;
}
}
dis[1]=0;
q.push((Tree){1,dis[1]});
while(!q.empty()){
d=q.top();
q.pop();
int x=d.id;
double w=d.dist;
if(vis[x]) continue;
vis[x]=1;
Max=max(Max,w);
cnt++;
for(int i=1;i<=n;i++){
if(dis[i]>a[x][i]&&!vis[i]&&a[x][i]){
dis[i]=a[x][i];
q.push((Tree){i,dis[i]});
}
}
if(cnt==n) break;
}
int i=1,ans=0;
while(jump[i]*jump[i]>=Max&&i<=m) ans++,i++;
printf("%d",ans);
return 0;
}
```
by mmh08100566 @ 2023-02-18 08:07:06
@[行动欲望π](/user/377578) %%%
by mmh08100566 @ 2023-02-18 08:07:26
AWA 我谢谢你
by 行动欲望π @ 2023-02-18 09:04:00