40分求助
查看原帖
40分求助
1265456
封禁用户楼主2024/7/17 20:21

rt.

#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int maxn=100005;
ll f[maxn],a[maxn],b[maxn],s,p,n,cnt;
double ans;
struct node
{
	ll x,y;
	double z;
}e[500*500+5];
bool cmp(node pre,node nxt)
{
	return pre.z<nxt.z;
}
ll find(ll x)
{
	return f[x]==x?x:f[x]=find(x);
}
int main()
{
	cin>>s>>p;
	for(ll i=1;i<=p;i++)
	{
		cin>>a[i]>>b[i];
		for(ll j=1;j<i;j++)
		n++,e[n].z=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])),e[n].x=i,e[n].y=j;
	}
	for(ll i=1;i<=p;i++)
	f[i]=i;
	sort(e+1,e+n+1,cmp);
	for(ll i=1;i<=n;i++)
	{
		ll u=find(e[i].x),v=find(e[i].y);
		if(u!=v)
		{
			f[find(u)]=find(v);
			ans=e[i].z,cnt++;
			if(cnt>=p-s)
			{
				printf("%.2lf\n",ans);
				return 0;
			}
		}
	}
	return 0;
}
2024/7/17 20:21
加载中...