萌新求助,空间被卡了
查看原帖
萌新求助,空间被卡了
110009
Soul_Love楼主2023/11/21 17:37

一道很久之前做的题,突然发现MLE一个点,卡不懂了,求求了qwq

#include<bits/stdc++.h>
using namespace std;
int n,m,q,f[5001],Q,W;
double ans;
inline int read()
{
    int k=0,f=0;char c=getchar();
    for(;!isdigit(c);c=getchar()) f|=c=='-';
    for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
    return f?-k:k;
}
struct point
{
	int x,y;
}h[5001];
struct edge
{
	short s,e;
	double w;
}g[13000010];
inline int cmp(edge a,edge b)
{
	return a.w<b.w;
}
inline int find(int s)
{
	if(f[s]==s) return s;
	else return f[s]=find(f[s]);
}
inline double k()
{
	int cnt=0;
	for(int i=1;i<=q;i++)
	{
		int x=find(g[i].s),y=find(g[i].e);
		if(x!=y)
		{
			f[x]=y;
			ans+=sqrt(g[i].w);
			if(++cnt>=n-1) return ans;
		}
	}
}
signed main()
{
	n=read();
	for(int i=1;i<=n;i++) f[i]=i;
	for(int i=1;i<=n;i++)
	{
		h[i].x=read(),h[i].y=read();
		for(int j=1;j<i;j++)
		{
			double u=(h[i].x-h[j].x+0.0)*(h[i].x-h[j].x+0.0)+(h[i].y-h[j].y+0.0)*(h[i].y-h[j].y+0.0);
			g[++q]=(edge){i,j,u};
		}
	}
	sort(g+1,g+1+q,cmp);
	printf("%.2lf",k());
	return 0;
}
2023/11/21 17:37
加载中...