题目链接:http://poj.org/problem?id=2031

题目意思是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。就是简单的最小生成树。

prim:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 using namespace std;
 6 const int MAXN = 105;
 7 struct data {
 8     double x , y , z , r;
 9 }a[MAXN];
10 double d[MAXN] , cost[MAXN][MAXN] , INF = 1e9;
11 bool vis[MAXN];
12
13 void init(int n) {
14     for(int i = 0 ; i <= n ; i++) {
15         for(int j = 0 ; j <= n ; j++)
16             cost[i][j] = INF;
17         d[i] = INF;
18         vis[i] = false;
19     }
20 }
21
22 inline double f(double x , double y) {
23     return (x - y) * (x - y);
24 }
25
26 double dis(int i , int j) {
27     double temp = f(a[i].x , a[j].x) + f(a[i].y , a[j].y) + f(a[i].z , a[j].z);
28     return sqrt(temp);
29 }
30
31 double prim(int s , int n) {
32     d[s] = 0;
33     double res = 0;
34     while(1) {
35         int u = -1;
36         double Min = INF;
37         for(int i = 1 ; i <= n ; i++) {
38             if(!vis[i] && Min > d[i]) {
39                 Min = d[i];
40                 u = i;
41             }
42         }
43         if(u == -1)
44             return res;
45         vis[u] = true;
46         res += d[u];
47         for(int i = 1 ; i <= n ; i++) {
48             d[i] = (d[i] > cost[u][i] ? cost[u][i] : d[i]);
49         }
50     }
51 }
52
53 int main()
54 {
55     int n;
56     ios::sync_with_stdio(false);
57     while(cin >> n && n) {
58         init(n);
59         for(int i = 1 ; i <= n ; i++) {
60             cin >> a[i].x >> a[i].y >> a[i].z >> a[i].r;
61         }
62         for(int i = 1 ; i < n ; i++) {
63             for(int j = i + 1 ; j <= n ; j++) {
64                 double temp = a[i].r + a[j].r , temp2 = dis(i , j);
65                 if(temp >= temp2)
66                     cost[i][j] = cost[j][i] = 0;
67                 else
68                     cost[i][j] = cost[j][i] = temp2 - temp;
69             }
70         }
71         double res = prim(1 , n);
72         printf("%.3f\n" , res);
73     }
74 }

kruskal:就是把边从小到大排序一下,用并查集判断祖节点是否相同,不同就合并。

转载于:https://www.cnblogs.com/Recoder/p/5304040.html

POJ 2031 Building a Space Station相关推荐

  1. POJ - 2031 Building a Space Station (最小生成树)

    题目链接:http://poj.org/problem?id=2031点击打开链接 Building a Space Station Time Limit: 1000MS   Memory Limit ...

  2. zoj 1718 poj 2031 Building a Space Station

    最小生成树,用了Kruskal算法.POJ上C++能过,G++不能过... 算出每两个圆心之间的距离,如果距离小于两半径之和,那么这两个圆心之间的距离直接等于0,否则等于距离-R[i]-R[j]. # ...

  3. pku 2031 Building a Space Station 最小生成树+精度控制

    http://poj.org/problem?id=2031 题意就是给你n个球的(球心以及半径),然后求最小生成树就欧了,这里的关键部分是对于重复的球的路径长度的处理 #include <io ...

  4. POJ_2031 Building a Space Station

    Building a Space Station 链接 POJ_2031 Building a Space Station Describe You are a member of the space ...

  5. poj2031 Building a Space Station

    题目链接:http://poj.org/problem?id=2031 题意:给你n个球,让你用最小的花费,把这n个球联通,如果两个球相交,就默认联通,否者连接这两个球的花费就是,球面之间的最短距离, ...

  6. I. Space Station(hash记忆化+dp)

    <文章>陆游 文章本天成,妙手偶得之. 粹然无疵瑕,岂复须人为. 君看古彝器,巧拙两无施. 汉最近先秦,固已殊淳漓. 胡部何为者,豪竹杂哀丝. 后夔不复作,千载谁与期? I. Space ...

  7. HDU 1815, POJ 2749 Building roads(2-sat)

    HDU 1815, POJ 2749 Building roads 题目链接HDU 题目链接POJ 题意: 有n个牛棚, 还有两个中转站S1和S2, S1和S2用一条路连接起来. 为了使得随意牛棚两个 ...

  8. 【POJ 1788 --- Building a New Depot】

    [POJ 1788 --- Building a New Depot] Description Advanced Cargo Movement, Ltd. is successfully expand ...

  9. Building a Space Station--POJ 2031

    1.题目类型:计算几何,最小生成树. 2.解题思路:(1)获得所有点路径长度的矩阵map[][]:(2)利用Prim算法求解最小生成树. 3.注意事项:数学操作,中间值全部用double保存. 4.实 ...

最新文章

  1. [转帖]Runtime, Engine, VM 的区别是什么?
  2. zigbee 常规配置
  3. 第七十六期:糟糕!服务器被植入挖矿木马,CPU飙升200%
  4. python中获取异常描述与else用法
  5. 服务器修改域,服务器修改域名
  6. Cocos2d-X开发中国象棋《三》開始场景的实现
  7. Watson的未来就是IBM的未来
  8. Rabbitmq的安装及集群环境的搭建
  9. php怎么初始化融云sdk,初始化融云 SDK
  10. Android使用惠普打印机,USB直连静默打印
  11. magic4.0跟harmonyos,支持升级Harmony 2.0 Magic UI 4.0 9月中旬招募公测
  12. 常用的线性充电IC和开关充电IC的区别
  13. thinkphp 检测上传的图片中是否含有木马脚本
  14. 网上处方药物手册Rxlist 及其药学信息资源
  15. java机票编程_携程预订机票后台java开发编程
  16. 通俗理解TIM定时器并简单使用
  17. VideoSolo Blu ray Player for Mac(mac蓝光播放器)
  18. 从艾优尼之死,看Freeme OS的深远价值
  19. genus 综合流程
  20. Initialization in《The Java® Virtual Machine Specification Java SE 7 Edition》

热门文章

  1. 《Python编程从入门到实践》记录之第3章 列表简介总结——列表添加修改和删除元素(思维导图)
  2. C# + OpenCvSharp实现仿射变换
  3. 文本检测-EAST方法概述
  4. 译文 | 与TensorFlow的第一次接触 第四章:单层神经网络
  5. ubuntu14.04matlab2015b 测试caffe的Matlab接口
  6. deno mysql_从 Node 到 Deno
  7. Huawei LiteOS简介
  8. VMware vSphere、 ESXi、Vcenter、vSphere Client关系
  9. linux下ts转mp4,ffmpeg安装及实现视频格式的转换、分片(ts m3u8)
  10. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...