题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置,在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间

题解:如果两个洞相交,那么d[i][j]=0;如果不相交,那么d[i][j]=dist-(r[i]+r[j]),dist为这两个洞圆心之间的欧几里得距离

再用Dijkstra处理就可以了

#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(int i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define sfd(n) scanf("%lf", &n)
#define pfi(n) printf("%d\n", n)
#define pfd(n) printf("%lf\n", n)
#define sfi2(n, m) scanf("%d%d", &n, &m)
#define sfd2(n, m) scanf("%lf%lf", &n, &m)
#define pfi2(n, m) printf("%d %d\n", n, m)
#define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
#define maxn 105
double dd[maxn][maxn];
struct Cir{
double x, y, z, r;
}c[maxn];
double get_d(Cir c1, Cir c2)
{
return sqrt((c1.x - c2.x) * (c1.x - c2.x) +
(c1.y - c2.y) * (c1.y - c2.y) +
(c1.z - c2.z) * (c1.z - c2.z));
} const double inf = 1000000000000.0;
struct Dijkstra {
int n; //图,须手动传入!
double E[maxn][maxn], d[maxn];
int p[maxn]; //最短路径,父亲 void init(int n) {
this->n = n;
repu(i, , n) repu(j, , n)
E[i][j] = dd[i][j];
} void solve(int s) {
static bool vis[maxn]; memset(vis, , sizeof(vis));
memset(p, , sizeof(p));
repu(i, , n + ) d[i] = inf;
d[s] = 0.0;
//repu(i, 0, n) pfd(d[i]);
while() {
int u = -;
for(int i = ; i < n; i ++) {
if(!vis[i] && (u == -||d[i] < d[u])) {
u = i;
}
}
if(u == - || d[u] == inf) break;
vis[u] = true;
for(int v = ; v < n; v ++) {
if(d[u] + E[u][v] < d[v]) {
d[v] = d[u] + E[u][v];
p[v] = u;
}
}
}
}
} dij; int main()
{
int n;
int kase = ;
while(~sfi(n) && n != -)
{
kase++;
repu(i, , n + )
sfd2(c[i].x, c[i].y), sfd2(c[i].z, c[i].r); sfd2(c[].x, c[].y), sfd(c[].z);
sfd2(c[n + ].x, c[n + ].y), sfd(c[n + ].z);
c[].r = c[n + ].r = 0.0; repu(i, , n + )
repu(j, , n + )
{
dd[i][j] = get_d(c[i], c[j]) - (c[i].r + c[j].r);
if(dd[i][j] < 0.0) dd[i][j] = 0.0;
//printf("%d %d %lf\n", i, j, dd[i][j]);
} dij.init(n + );
dij.solve(); //repu(i, 0, n + 2) pfd(dij.d[i]);
printf("Cheese %d: Travel time = %d sec\n",
kase, (int)round(dij.d[n + ] * 10.0));
}
return ;
}

uva 1001(最短路)的更多相关文章

  1. UVA 1001 Say Cheese 奶酪里的老鼠(最短路,floyd)

    题意:一只母老鼠想要找到她的公老鼠玩具(cqww?),而玩具就丢在一个广阔的3维空间(其实可以想象成平面)上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10 ...

  2. uva 11374 最短路+记录路径 dijkstra最短路模板

    UVA - 11374 Airport Express Time Limit:1000MS   Memory Limit:Unknown   64bit IO Format:%lld & %l ...

  3. UVa 1001 Say Cheese (Dijkstra)

    题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...

  4. uva 10269 最短路

    求两次最短路 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> ...

  5. UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)

    https://vjudge.net/problem/UVA-1001 题意:一个奶酪里有n个洞,老鼠在奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.计算出老鼠从A点到达O点所需的最短时间 ...

  6. uva 1048 最短路的建图 (巧,精品)

    大白书 P341这题说的是给了NT种飞机票,给了价钱和整个途径,给了nI条要旅游的路线.使用飞机票都必须从头第一站开始坐,可以再这个路径上的任何一点下飞机一但下飞机了就不能再上飞机,只能重新买票,对于 ...

  7. uva 10917 最短路+dp

    https://vjudge.net/problem/UVA-10917 给出N点M边的无向图,没重边.对于点A,B,当且仅当从B到终点的最短路小于任何一条从A到终点的最短路时,才考虑从A走到B,否则 ...

  8. 紫书 习题 11-2 UVa 1001 (Floyd)

    这道题只是在边上做一些文章. 这道题起点终点可以看成半径为0的洞, 我是直接加入了洞的数组. 边就是两点间的距离减去半径, 如果结果小于0的话, 距离就为0, 距离不能为负 然后我看到n只有100, ...

  9. UVa 1001 Say Cheese【floyd】

    题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置, 在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 看到n<=100,又是求最短时间,想到 ...

随机推荐

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布

    (新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...

  2. DuiLib学习bug整理——某些png不能显示

    今天下午遇到用ps导出的png显示不出来的情况.而从其他来源的png有的可以显示.到群里问了下也有人遇到过,但是都没想明白具体原因.后来经人指点说png保存时存在深度位不同.最后经过测试 8位深度.3 ...

  3. 连接弹性和命令拦截的 ASP.NET MVC 应用程序中的实体框架

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    上篇博客我们学习了EF 之 MVC 排序,查询,分 ...

  4. wkwebview a target="_blank" 打不开链接的解决方案

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigatio ...

  5. SignalR实时推送

    SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现.在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 ...

  6. 解决SVN不显示状态图标

    打开注册表,找到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlay ...

  7. 【001:转载 eclipse中颜色的设置】

    转自于:http://www.cnblogs.com/arci/archive/2011/01/23/1942646.html Eclipse颜色设置 参考配色方案: http://www.cs.cm ...

  8. PHP composer 安装流程

    打开php的openssl扩展 可以在wamp管理器里直接打开openssl扩展,也可以使用php命令打开扩展,还可以通过修改php.ini后重启打开扩展. 下面给出命令打开扩展的示例: 可以通过以下 ...

  9. JQuery EasyUI的datagrid的使用方式总结

    JQuery EasyUI的datagrid的使用方式总结第一步:添加样式和js脚本在前台添加展示数据表格的table元素 例如: <div> <table id="tt& ...

  10. css美化checkbox radio样式

    /*check,radio*/ input.check_txt[type='checkbox']{ display: none; } input.check_txt[type='checkbox'] ...