社区讨论
蒟蒻再次求教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 条回复,欢迎继续交流。
正在加载回复...