hdu 1162

来源:互联网 发布:js注释 编辑:程序博客网 时间:2024/05/17 00:56
点击打开链接//保留两位小数//kruskal 并查集#include <iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;typedef pair<double,double>PII;const int maxe=6000+5;const int maxv=100+5;struct Edge{int from,to;double weight;};bool operator<(const Edge&E1,const Edge&E2){    return E1.weight<E2.weight;}Edge edges[maxe];int parent[maxv];PII num[maxv];int find(int x){    return x==parent[x]?x:parent[x]=find(parent[x]);}int main(){    int v;    while(scanf("%d",&v)==1)    {        for(int i=0;i<v;i++)        {            cin>>num[i].first>>num[i].second;        }        for(int i=1;i<=v;i++)            parent[i]=i;        int ans=0;        for(int i=0;i<v-1;i++)            for(int j=i+1;j<v;j++)                {                    edges[ans].from=i+1;                    edges[ans].to=j+1;                    edges[ans].weight=hypot(num[i].first-num[j].first,num[i].second-num[j].second);                    ans++;                }        sort(edges,edges+ans);        double sum=0;        for(int i=0;i<ans;i++)        {            int p1=find(edges[i].from);            int p2=find(edges[i].to);            if(p1==p2) continue;            parent[p1]=p2;            sum+=edges[i].weight;        }        printf("%.2f\n",sum);    }    return 0;}

原创粉丝点击