poj 2031Building a Space Station(几何判断+Kruskal最小生成树)

简介:

/*
  最小生成树 + 几何判断
  Kruskal      球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int f[105];
struct ball{
   double x, y, z, r;
};

struct connect{
   double dist;
   int a, b;
};

connect c[5005];

ball b[105];

bool cmp(connect a, connect b){
   return a.dist < b.dist;
}
int n;

int getFather(int x){
   return x==f[x] ? x : f[x]=getFather(f[x]); 
} 

int Union(int a, int b){
    int fa=getFather(a), fb=getFather(b);
    if(fa!=fb){
        f[fa]=fb;
        return 1;
    }
    return 0;
}

int main(){
   int i, j;
   while(scanf("%d", &n) && n){
      for(i=1; i<=n; ++i)
         scanf("%lf%lf%lf%lf", &b[i].x, &b[i].y, &b[i].z, &b[i].r);
      int cnt=0;
      for(i=1; i<n; ++i)
         for(j=i+1; j<=n; ++j){
             double d = sqrt((b[i].x-b[j].x)*(b[i].x-b[j].x) + (b[i].y-b[j].y)*(b[i].y-b[j].y) + (b[i].z-b[j].z)*(b[i].z-b[j].z))
                        - (b[i].r + b[j].r);
               c[cnt].dist= d<0 ? 0: d;
               c[cnt].a=i; 
               c[cnt++].b=j;
         }
       sort(c, c+cnt, cmp); 
       double minSum=0.0;
       for(i=1; i<=n; ++i)
          f[i]=i;
       for(i=0; i<cnt; ++i){
          if(Union(c[i].a, c[i].b))
             minSum+=c[i].dist;
       }
       printf("%.3lf\n", minSum);
   }
   return 0;
}

目录
相关文章
|
12月前
【HarmonyOS学习】应用程序包
一个应用中的所有.hap与.hsp文件合在一起称为Bundle,其对应的bundleName是应用的唯一标识 当应用发布上架到应用市场时,需要将Bundle打包为一个.app后缀的文件用于上架,这个.app文件称为App Pack(Application Package),与此同时,DevEco Studio工具自动会生成一个pack.info文件。pack.info文件描述了App Pack中每个HAP和HSP的属性,包含APP中的bundleName和versionCode信息、以及Module中的name、type和abilities等信息。
454 5
【HarmonyOS学习】应用程序包
|
弹性计算 网络协议 文件存储
将Windows系统机器加入AD域
一台Windows服务器需要加入到Active Directory域后才能通过AD域服务来管理。本文介绍了如何将一台Windows服务器加入已有的AD域。
5211 0
将Windows系统机器加入AD域
|
Android开发 iOS开发 MacOS
阿里云盘分享功能来了,免费领128G永久容量
阿里云盘上线测试已经有一段时间了,主打不限速下载,今天,阿里云盘分享功能正式公测了。
5974 0
阿里云盘分享功能来了,免费领128G永久容量
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】
|
C语言
执行操作时候只执行一次的标志位逻辑实现(C语言)
执行操作时候只执行一次的标志位逻辑实现(C语言)
1198 1
|
存储 人工智能 安全
重磅干货不容错过!2017云栖大会汇总资料,速来领取!
2017云栖大会圆满结束!云栖大会由阿里巴巴集团主办,已经成为全球云计算TOP级峰会,汇聚DT时代最强大脑,描绘云计算发展趋势和蓝图,展现云计算、大数据、人工智能蓬勃发展的技术生态全景。云栖社区福利大放送,本文整理了全年8场峰会的资料,约800份技术资料,等你来下载!
110293 0
|
分布式计算 运维 DataWorks
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
数据集成主要用于离线(批量)数据同步。离线(批量)的数据通道通过定义数据来源和去向的数据源和数据集,提供一套抽象化的数据抽取插件(Reader)、数据写入插件(Writer),并基于此框架设计一套简化版的中间数据传输格式,从而实现任意结构化、半结构化数据源之间数据传输。结合用户在使用OTS数据源同步的时候容易出现问题,这里演示:OTS数据源同步数据到Maxcompute的具体实现步骤。
1778 0
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习:Mac下Tensorflow安装及报错解决
深度学习:Mac下Tensorflow安装及报错解决
381 0
|
SQL Oracle 关系型数据库
循序渐进解读Oracle AWR性能分析报告
Oracle中的AWR为我们分析数据库提供了非常好的便利条件,那如何解读AWR的数据呢?本文针对最为常见的一种报告——《AWR数据库报告》进行说明。
|
编解码 安全 视频直播
【直播系列之一】1篇文章看懂峰值带宽、流量、转码、连麦、截图五大直播计费方式
本文带你了解阿里云视频直播的五大计费方式,你可以按需选择,合理配置资源。
11021 1