求助,MLE
查看原帖
求助,MLE
385817
QianK楼主2021/9/28 21:28

rt,求dalao调一下

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; 
int n,s,cnt,flag;
double ans;
int xx[505],yy[505],f[505];
int find(int x)
{
	if(x==f[x]) return x;
	return f[x]=find(f[x]);
}
struct node{
	int u,v;
	double w;
};
double dis(int x1,int x2,int y1,int y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
node q[250010];
void add(int from,int to,double dist)
{
	cnt++;
	q[cnt].u=from;
	q[cnt].v=to;
	q[cnt].w=dist;
}
int cmp(node a,node b)
{
	return a.w<b.w;
}
void kru(){
	sort(q+1,q+1+cnt,cmp);
	for(int i=1;i<=n;i++)
	{
		int a=find(q[i].u),b=(q[i].v);
		if(a!=b)
		{
			f[a]=b;
			ans=q[i].w;
			flag++;
			if(flag==n-s) return ;	
		}	
	}
}
int main(){
	scanf("%d%d",&s,&n);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&xx[i],&yy[i]),f[i]=i;
	for(int i=1;i<=n;i++)
		for(int j=1;j<i;j++)
			add(i,j,dis(xx[i],xx[j],yy[i],yy[j]));
	kru();
	printf("%.2lf",ans);
	return 0;
}
2021/9/28 21:28
加载中...