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- ;
const int INF = <<; 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[] ;
double dist[][],ans ;
bool vis[] ;
int n ; int prim()
{
ans = ;
int i,j,flag;
double minn ;
for(i = ; i <= n ; i++)
{
low[i] = INF ;
vis[i] = false ;
}
low[] = ;
for(i = ; i <= n ; i++)
{
minn = INF ;
flag = ;
for(j = ; 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 = ; 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[];
memset(dist,,sizeof(dist));
for(int i=; i<=n; i++)
scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].w);
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(dis(a[i],a[j])-a[i].w-a[j].w<=)//两球间最短距离为两球球心距离再减去两球的半径
dist[i][j]=;
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 ;
}

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

POJ2031Building a Space Station的更多相关文章

  1. POJ2031Building a Space Station (最小生成树之prim)

    Problem Description You are a member of the space station engineering team, and are assigned a task ...

  2. poj--2031--Building a Space Station(prime)

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6635   Accepte ...

  3. poj2031-Building a Space Station(最小生成树,kruskal,prime)

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5874   Accepte ...

  4. POJ 2031 Building a Space Station

    3维空间中的最小生成树....好久没碰关于图的东西了.....              Building a Space Station Time Limit: 1000MS   Memory Li ...

  5. [ACM_搜索] POJ 1096 Space Station Shielding (搜索 + 洪泛算法Flood_Fill)

    Description Roger Wilco is in charge of the design of a low orbiting space station for the planet Ma ...

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

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5173   Accepte ...

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

    Building a Space Station 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/C Description Yo ...

  8. Building a Space Station(kruskal,说好的数论呢)

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3820   Accepted: 1950 Description You a ...

  9. poj 2031 Building a Space Station【最小生成树prime】【模板题】

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5699   Accepte ...

随机推荐

  1. Win32非递归遍历和搜索文件以及目录算法

    转载请注明来源:http://www.cnblogs.com/xuesongshu 要点: 1.搜索的顶层目录在进入循环之前进栈 2.栈元素存储字符串指针,出栈时释放资源 3.每次循环开始,栈顶元素出 ...

  2. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

  3. Git的安装以及一些操作

    1.安装Git-2.5.1-64-bit.exe  一直下一步直至完成 2.注册github账号 官网地址:https://github.com/github 3.找到一个按钮“New Reposit ...

  4. Apache 使用密码文件验证用户

    使用文本文件作为密码文件 创建密码文件 需要使用htpasswd.exe文件来创建用户密码文件 语法: htpasswd -c '文件完整路径' 用户名 向一个用户密码文件中添加一个新用户 语法: h ...

  5. linux gcc 和 g++ 编译

    gcc编译 gcc -o test.out test.c g++ 编译 g++ -o test.out test.cpp

  6. Mysql slave 同步错误解决

    涉及知识点 mysql 主从同步 ,参考: MySQL数据库设置主从同步 mysqlbin log查看, 参考:MySQL的binlog日志 解决slave报错, 参考: Backup stopped ...

  7. Mysql 数据库安装配置

    MySQL的多种安装方法 在当今的互联网企业,Mysql数据服务几乎都是运行在LINUX系统操作系统上,当然你也可以在WINDOWS.UNIX等商业操作系统上运行. 但是一般企业都会采用LNMP.LA ...

  8. L012-oldboy-mysql-dba-lesson12

    L012-oldboy-mysql-dba-lesson12 graphite监控mysql可以达到秒级别 Zabbix for mysql NagiosXI daemontools linux    ...

  9. php学习问题记录

    1.微信应用开发,Token认证失败,解决方法php页面加上一句代码: header('content-type:text');

  10. DTCMS一些问题

    站点管理,主站和手机站同时绑定不同域名 手机站会报错,解决方法为 主站不绑定 手机站绑定 关键问题为:不能和主站域名相同 PC模版文件下的JS文件夹下的commen.js和手机模版下的JS文件夹下的b ...