10分,求大神调QAQ
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
int m,a[500005],n,x[1000005],y[1000005],ans,k,pre[100005];
double tmp;
struct stl
{
int x2,y2;
double v;
}p[1000005];
bool cmp(stl u,stl h)
{
return u.v<h.v;
}
int f(int x)
{
if(pre[x]!=x)
{
pre[x]=f(pre[x]);
}
return pre[x];
}
int main()
{
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j)
{
k++;
p[k].x2=i;
p[k].y2=j;
p[k].v=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
}
int flag=0;
sort(p+1,p+k+1,cmp);
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
for(int i=1;i<=k;i++)
{
if(flag==n-1)
{
break;
}
if(f(p[i].x2)!=f(p[i].y2))
{
pre[p[i].x2]=pre[p[i].y2];
flag++;
tmp=p[i].v;
}
}
for(int i=1;i<=m;i++)
{
if(tmp<=a[i])
{
ans++;
}
}
cout<<ans<<endl;
return 0;
}