http://poj.org/problem?id=2031

题意:你是空间站的一员,太空里有很多球形且体积不一的“小房间”,房间可能相距不近,也可能是接触或者甚至是重叠关系,所有的房间都必须相连,这样的话宇航员才能从这个房间走到另一个房间,而宇航员从一个房间走到另一个房间,只要满足三个条件中的一个即可:1两个房间是接触的,2两个房间是重叠的,3两个房间之间有走廊相连。也因此若是没有接触的两个小房间就要有走廊连接,忽略走廊的宽度,花费与长度成正比,所以当然是花费越少越好,而球与球之间的距离只接触到两球的表面即可,因为两球的表面相距最近,因此你的工作就是算给出的几个小房间中要达到相连的状态需花费的最小钱数是多少

思路:要求两个房间之间必须要有相连的走廊,所以就是最小生成树的思想,只要再考虑一下是不是接触或重叠就可以了

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>using namespace std ;const double eps=1e-8 ;
const int INF = 1<<28;struct point
{double x,y,z,w ;point() {}point(double a,double b,double c,double d):x(a),y(b),z(c),w(d) {}
};inline double sqrt1(double a)//函数被调用的次数多了就比较浪费时间,所以可以定义成内置函数
{return a*a;
}double dis(const point &a,const point &b)//求两点间距离
{return sqrt(sqrt1(a.x-b.x)+sqrt1(a.y-b.y)+sqrt1(a.z-b.z));
}double low[1000] ;
double dist[110][110],ans ;
bool vis[1000] ;
int n ;int prim()
{ans = 0 ;int i,j,flag;double minn ;for(i = 1 ; i <= n ; i++){low[i] = INF ;vis[i] = false ;}low[1] = 0 ;for(i = 1 ; i <= n ; i++){minn = INF ;flag = 0 ;for(j = 1 ; j <= n ; j++){if(minn > low[j]&&!vis[j]){minn = low[j] ;flag = j ;}}if(minn >= INF)return false ;ans += minn ;vis[flag] = true ;for(j = 1 ; j <= n ; j++){if(!vis[j]&&low[j]>dist[flag][j])low[j] = dist[flag][j] ;}}return true ;
}int main()
{while(scanf("%d",&n)&&n){point a[1000];memset(dist,0,sizeof(dist));for(int i=1; i<=n; i++)scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].w);for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){if(dis(a[i],a[j])-a[i].w-a[j].w<=0)//两球间最短距离为两球球心距离再减去两球的半径dist[i][j]=0;else if(dis(a[i],a[j])-a[i].w-a[j].w>eps)dist[i][j]=dis(a[i],a[j])-a[i].w-a[j].w;}}prim();printf("%.3lf\n",ans);}return 0;
}

View Code

特别郁闷的是明明是同一个代码,一开始交是0ms后来交就是16ms。。。。。

转载于:https://www.cnblogs.com/luyingfeng/p/3400578.html

POJ2031Building a Space Station相关推荐

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

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

  2. POJ_2031 Building a Space Station

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

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

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

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

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

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

    1 /* 2 最小生成树 + 几何判断 3 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 4 */ 5 #include<iostream ...

  6. POJ 2031 Building a Space Station

    题目链接:http://poj.org/problem?id=2031 题目意思是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则算为已连通,无需再 ...

  7. zoj 1718 poj 2031 Building a Space Station

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

  8. poj2031 Building a Space Station

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

  9. 2019 ICPC Asia Nanjing Regional I. Space Station题解

    文章目录 [题目链接] [前言] [题目大意] [解题思路] 一.优先暴力 二.记忆化 三.unordered_map以及思维优化 四.乘法逆元(拓展内容) [后记] [题目链接] https://n ...

  10. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——9 - Space Politics(空间政治)

    Unit 9 - Space Politics(空间政治) Space Politics It is expected that the discovery of possible life-form ...

最新文章

  1. Maven中jar版本冲突问题的解决
  2. weblogic 启动项目失败,JMS 队列通过http 方式访问
  3. php中区分大小写的超全局变量总结
  4. struts2操作json成字符串格式错误被转义及其前台访问json对象的方法
  5. 13、不同存储引擎的数据表在文件系统里是如何表示的?
  6. jQuery中json对象与json字符串互换
  7. intelij不识别java文件
  8. php 取经纬度,php根据地址获取百度地图经纬度的实例方法
  9. js防止表单的重复提交
  10. 赌一把:整合了30家独立报告后,我发现了2020年的五大安全趋势
  11. Javascript 钩子机制——开会得出的结论
  12. (day 52 - 二叉搜索树) 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
  13. oppo计算机找不到,oppo手机文件在电脑上无法读取怎么办
  14. 网站盈利模式分析分类
  15. 协议大全 http协议 http://www.chinaitpower.com/Net/xieyi/HTTP/index.html
  16. 动画:从 AE 到 Web
  17. Unity UI Text组件添加contentsizefitter后获取RectTransform宽度
  18. 在ubuntu中运行sudo apt-get update报错The following signatures couldn‘t be verified because the public key
  19. C语言之大端模式与小端模式
  20. mac 彻底删除mysql 8.0

热门文章

  1. 从设计门禁系统到为何需要弱电与强电分开呢?
  2. 简单易懂之python 中的map,filter,reduce用法
  3. /etc/fstab修改及mkfs(e2label)相关应用与疑问
  4. 洛谷 1583——魔法照片(排序Ex)
  5. [转] 做一个让人欣赏的女子
  6. 【转】J2ME开发环境的建立
  7. c#类的定义,c#中的关健字,C#标识符
  8. 【NOIp模拟赛】种花
  9. 20145305 《网络对抗》注入Shellcode并执行Return-to-libc 攻击实验
  10. Apache Camel系列(3)----Redis组件