10分,求助QAQ
查看原帖
10分,求助QAQ
965646
孟令然2013楼主2024/7/30 17:06

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;
}
2024/7/30 17:06
加载中...