POJ 2560

来源:互联网 发布:js 图层隐藏 编辑:程序博客网 时间:2024/06/11 23:48

【题目分析】
最小生成树。


【代码】

#include <cstdio>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int f[101],n,en=1;double x[101],y[101],w[10001],ans=0;int fr[10001],to[10001],rank[10001];inline int gf(int k){if (f[k]==k) return k;else return f[k]=gf(f[k]);}inline bool cmp(int a,int b){return w[a]<w[b];}int main(){    scanf("%d",&n);    for (int i=1;i<=n;++i) scanf("%lf%lf",&x[i],&y[i]);    for (int i=1;i<n;++i)        for (int j=i+1;j<=n;++j)        {            fr[en]=i;to[en]=j;            w[en]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));            en++;        }    for (int i=1;i<=n;++i) f[i]=i;    for (int i=1;i<en;++i) rank[i]=i;    sort(rank+1,rank+en,cmp);    for (int i=1;i<en;++i)    {        int l=fr[rank[i]],r=to[rank[i]];        int fl=gf(l),fr=gf(r);        if (fl!=fr) ans+=w[rank[i]],f[fl]=fr;    }    printf("%.2f\n",ans);}
0 0
原创粉丝点击