社区讨论

蒟蒻再次求教qwq

P2872[USACO07DEC] Building Roads S参与者 7已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mi6x9304
此快照首次捕获于
2025/11/20 12:19
4 个月前
此快照最后确认于
2025/11/20 12:19
4 个月前
查看原帖
六十分,不开心2333
CPP
#include <bits/stdc++.h>

using namespace std;
int f[1005],x[1005],y[1005];
int gf(int x)
{
	if(x==f[x])
		return x;
	else
		return f[x]=gf(f[x]);
}
int tot=0;
double ans=0.0; 
int merge(int x,int y,double a)
{
	int fax=gf(x);
	int fay=gf(y);
	if(fax!=fay)
	{
		tot++;
		ans+=a;
		return f[fax]=fay;
	}
}
struct Node
{
	int c,d;
	double a;
	bool operator<(const Node t) const
	{
		return a<t.a;
	}
}e[1000005];
int last=0; 

int main()
{
	int n,m;
	cin >> n >> m;
	for(int i=1;i<=n;i++)
		f[i]=i;
	for(int i=1;i<=n;i++)
	{
		cin >> x[i] >> y[i];
	}
	for(int i=1;i<=m;i++)
	{
		int s,t;
		cin >> s >> t;
		e[++last].c=s;
		e[last].d=t;
		e[last].a=0.0;	
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<i;j++)
		{
			if(f[i]!=f[j])
			{
				e[++last].c=i;
				e[last].d=j;
				e[last].a=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
			}
		}
	}
	sort(e+1,e+last+1);
	for(int i=1;i<=last;i++)
	{
		merge(e[i].c,e[i].d,e[i].a);
		if(tot==n-1)
		{
			printf("%.2df",ans);
			return 0;
		}
	}
}

回复

9 条回复,欢迎继续交流。

正在加载回复...