zoukankan      html  css  js  c++  java
  • 10034

     1 /*
     2 10034 - Freckles
     3 克鲁斯克尔最小生成树!~ 
     4 */
     5 #include<iostream>
     6 #include<cstdio>
     7 #include<cmath>
     8 #include<algorithm>
     9 using namespace std;
    10 
    11 struct node{
    12    double x, y;
    13 };
    14 
    15 struct tree{
    16    int u, v;
    17    double d;
    18 };
    19 
    20 node nd[105];
    21 int f[105];
    22 tree tt[5010];
    23 
    24 bool cmp(tree a, tree b){
    25    return a.d < b.d;
    26 }
    27 
    28 int getFather(int x){
    29    return x==f[x] ? x : f[x]=getFather(f[x]);
    30 }
    31 
    32 int Union(int a, int b){
    33    int fa=getFather(a), fb=getFather(b);
    34    if(fa!=fb){
    35       f[fa]=fb;
    36       return 1;
    37    }
    38    return 0;
    39 } 
    40 
    41 int main(){
    42    int t;
    43    cin>>t;
    44    while(t--){
    45       int n;
    46       cin>>n;
    47       for(int i=1; i<=n; ++i){
    48          cin>>nd[i].x>>nd[i].y;
    49          f[i]=i;
    50       }
    51       int cnt=0;
    52       for(int i=1; i<n; ++i)
    53          for(int j=i+1; j<=n; ++j){
    54             tt[cnt].u=i;
    55             tt[cnt].v=j;
    56             tt[cnt++].d=sqrt((nd[i].x-nd[j].x)*(nd[i].x-nd[j].x) + (nd[i].y-nd[j].y)*(nd[i].y-nd[j].y)); 
    57          }
    58       sort(tt, tt+cnt, cmp);
    59       double sum=0.0;
    60       for(int i=0; i<cnt; ++i){
    61          if(Union(tt[i].u, tt[i].v))
    62             sum+=tt[i].d;
    63       }
    64       printf("%.2lf
    ", sum);
    65       if(t) printf("
    ");
    66    }
    67 }
  • 相关阅读:
    大工程(bzoj 3611)
    消耗战(bzoj 2286)
    Computer(hdu 2196)
    文件排版(codevs 1300)
    洛谷 P2015 二叉苹果树
    洛谷 P2014 选课
    洛谷 P1352 没有上司的舞会
    COGS 505. 城市
    洛谷 P1306 斐波那契公约数
    洛谷 P1962 斐波那契数列
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3898428.html
Copyright © 2011-2022 走看看