POJ 2560 Freckles

来源:互联网 发布:微信加好友软件靠谱吗 编辑:程序博客网 时间:2024/06/06 13:19

数据太水了,所以用暴力求的距离。

////  main.cpp//  Richard////  Created by 邵金杰 on 16/7/24.//  Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int maxn=100+10;struct node{    float x,y;}node[maxn];struct edge{    int u,v;    float w;    bool operator < (struct edge p)const{        return w<p.w;    }}edge[maxn*maxn];int pa[maxn*maxn];int getroot(int a) {return pa[a]==a?a:pa[a]=getroot(pa[a]);}float dis(int i,int j){    float x1,y1,x2,y2;    x1=node[i].x,y1=node[i].y;    x2=node[j].x,y2=node[j].y;    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}int main(){    int n,cnt=0;    float ans=0;    scanf("%d",&n);    for(int i=1;i<=n;i++) pa[i]=i;    for(int i=0;i<n;i++) scanf("%f%f",&node[i].x,&node[i].y);    for(int i=0;i<n;i++)    {        for(int j=i+1;j<n;j++)        {            edge[cnt].u=i;            edge[cnt].v=j;            edge[cnt].w=dis(i,j);            cnt++;        }    }    sort(edge,edge+cnt);    for(int i=0;i<cnt;i++)    {        int root1,root2;        root1=getroot(edge[i].u);        root2=getroot(edge[i].v);        if(root1==root2) continue;        pa[root2]=root1;        ans+=edge[i].w;    }    printf("%.2f\n",ans);    return 0;}


0 0
原创粉丝点击