P2872 10pts 求调
  • 板块学术版
  • 楼主liukezhang
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/1 12:58
  • 上次更新2023/12/1 18:02:38
查看原帖
P2872 10pts 求调
877908
liukezhang楼主2023/12/1 12:58

P2872

code:

#include<bits/stdc++.h>
using namespace std;
struct len
{
	int u,v;
	double d;
};
struct point
{
	int x,y;
};
const int MN=1000005;
int f[MN];
len b[MN];
point a[MN];
int find(int x)
{
	return x==f[x]?x:f[x]=find(f[x]);
}
double sq(int x1,int y1,int x2,int y2)
{
	return sqrt((double)(x1-x2)*(x1-x2)+(double)(y1-y2)*(y1-y2));
}
bool cmp(len a,len b)
{
	if (a.d==b.d)
	{
		return a.u<b.u;
	}
	return a.d<b.d;
}
int main(void)
{
	int n,m,cnt=0;
	double s=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		f[i]=i;
		scanf("%d%d",&a[i].x,&a[i].y);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			b[++cnt].u=i;
			b[cnt].v=j;
			b[cnt].d=sq(a[b[i].u].x,a[b[i].u].y,a[b[i].v].x,a[b[i].v].y);
		}
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&b[++cnt].u,&b[cnt].v);
		b[cnt].d=0;
	}
	sort(b+1,b+cnt+1,cmp);
	for(int i=1;i<=cnt;i++)
	{
		int p=find(b[i].u),q=find(b[i].v);
		if (p!=q)
		{
			f[p]=q;
			s+=b[i].d;
		}
	}
	printf("%.2lf",s);
 	return 0;
}
2023/12/1 12:58
加载中...