您的位置:首页 > 其它

hdu1162最小生成树

2016-09-09 09:45 260 查看
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
using namespace std;
#define INF 0x3f3f3f3f
typedef __int64 ll;
struct node
{
double w;
int u,v;
} edge[105*105/2];
int f[105];
bool cmp(node a,node b)
{
return a.w<b.w;
}
int _find(int x)
{
if(x!=f[x])
f[x]=_find(f[x]);
return f[x];
}
double x[105],y[105];
double get_dis(int a,int b)
{
return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int cnt=0;
for(int i=1;i<=n;i++)
{
f[i]=i;
scanf("%lf%lf",&x[i],&y[i]);
for(int j=1;j<i;j++)
{
edge[cnt].w=get_dis(i,j);
edge[cnt].u=i;
edge[cnt].v=j;
cnt++;
}
}
sort(edge,edge+cnt,cmp);
double ans=0;
for(int i=0;i<cnt;i++)
{
int fa=_find(edge[i].u),fb=_find(edge[i].v);
if(fa!=fb)
{
fa>fb?f[fa]=fb:f[fb]=fa;
ans+=edge[i].w;
}
}
printf("%.2f\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: