pid=1596">http://acm.hdu.edu.cn/showproblem.php?pid=1596



Problem Description
XX星球有非常多城市,每一个城市之间有一条或多条飞行通道。可是并非全部的路都是非常安全的。每一条路有一个安全系数s,s是在 0 和 1 间的实数(包含0,1),一条从u 到 v 的通道P 的安全度为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 。如今8600 想出去旅游,面对这这么多的路。他想找一条最安全的路。

可是8600 的数学不好。想请你帮忙 ^_^

 
Input
输入包含多个測试实例,每一个实例包含:

第一行:n。n表示城市的个数n<=1000;

接着是一个n*n的矩阵表示两个城市之间的安全系数,(0能够理解为那两个城市之间没有直接的通道)

接着是Q个8600要旅游的路线,每行有两个数字。表示8600所在的城市和要去的城市
 
Output
假设86无法达到他的目的地,输出"What a pity!",

其它的输出这两个城市之间的最安全道路的安全系数,保留三位小数。
 
Sample Input
3
1 0.5 0.5
0.5 1 0.4
0.5 0.4 1
3
1 2
2 3
1 3
 
Sample Output
0.500
0.400
0.500
 

SPFA

#include <cstdio>
#include <cstring>
#include <queue>
#define MAXN 1100
using namespace std; double map[MAXN][MAXN];
int vis[MAXN];//推断是否增加队列了
int num;
double low[MAXN];//存最短路径
int s, e;
int M, N;
void SPFA()
{
int i, j;
queue<int> Q;
memset(low, 0, sizeof(low));
memset(vis, 0, sizeof(vis));
vis[s] = 1;
low[s] = 1;
Q.push(s);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = 0;//出队列了,不在队列就变成0
for(i = 1; i <= N; ++i)
{ if(low[i] < low[u] * map[u][i])
{
low[i] = low[u] * map[u][i];
if(!vis[i])
{
vis[i]=1;
Q.push(i);
}
}
}
}
if(low[e] == 0) printf("What a pity!\n");
else printf("%.3f\n",low[e]);
}
int main()
{
int u, v;
double w; while(~scanf("%d", &N))
{
num=0;
for(int i=1 ;i <= N; ++i)
{
for(int j=1; j <= N; ++j)
{
scanf("%lf",&w);
map[i][j]=w;
}
}
scanf("%d", &M);
while(M--)
{
scanf("%d%d", &s, &e);
SPFA();
} }
return 0;
}

Dijkstra

#include<stdio.h>
#include<string.h>
double map[1010][1010];
double dis[1010];
bool used[1010];
int n;
int i,j;
void dijkstra(int u)
{
memset(used,0,sizeof(used));
for(i=1;i<=n;++i)
dis[i]=0; int pos=u;
for(i=1;i<=n;++i)//第一次给dis赋值
{
dis[i]=map[u][i];
}
dis[u]=1;
used[u]=1;
for(i=1;i<n;++i)//再找n-1个点
{
double max=0;
for(j=1;j<=n;++j)
{
if(!used[j]&&max<dis[j])
{
max=dis[j];
pos=j;
}
}
used[pos]=1;
dis[pos]=max;
for(j=1;j<=n;++j)//把dis数组更新,也叫松弛
{
if(!used[j]&&dis[j]<map[pos][j]*dis[pos])
{
dis[j]=map[pos][j]*dis[pos];
}
}
}
}
int main()
{
int m;
double w;
int u,v;
while(~scanf("%d",&n))
{
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{
scanf("%lf",&w);
map[i][j]=w;
} scanf("%d",&m);
while(m--)
{
scanf("%d%d",&u,&v);
dijkstra(u);
if(dis[v]==0) printf("What a pity!\n");
else
printf("%.3lf\n",dis[v]);
}
}
return 0;
} /*
3
1 0.5 0.5
0.5 1 0.2
0.5 0.2 1
3
1 2
2 3
1 3
*/

find the safest road HDU杭电1596【Dijkstra || SPFA】的更多相关文章

  1. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  2. 杭电 1596 find the safest road (最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1596 这道题目与杭电2544最短路的思想是一样的.仅仅只是是把+改成了*,输入输出有些不一样而已. find t ...

  3. 杭电1596 find the safest road

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】

    pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...

  5. 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)

    呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...

  6. 杭电 1596 find the safest road (最小路径变形求最大安全度)

    Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的 ...

  7. HDU Today HDU杭电2112【Dijkstra || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...

  8. Choose the best route HDU杭电2680【dijkstra算法 || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2680 Problem Description One day , Kiki wants to visit one ...

  9. 畅通project续HDU杭电1874【dijkstra算法 || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...

随机推荐

  1. 小学生绞尽脑汁也学不会的python(初识面对对象)

    小学生绞尽脑汁也学不会的python(初识面对对象) 一. 面向对象思想 1. 面向过程. 重点在"过程". 按照实物的发展流程. 先干嘛,后干嘛, 最后干嘛.... 优点: 简单 ...

  2. SVN学习总结(1)——SVN简介及入门使用

    SVN简介:  为什么要使用SVN?       程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversi ...

  3. Jquery-select元素操作方法

    jQuery获取Select元素,并选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添 ...

  4. gdb学习-checkpoint,watch

    checkpoint的内容参考: http://blog.chinaunix.net/uid-23629988-id-2943273.html 这一篇主要是checkpoint,在next之前加che ...

  5. 任务调度器quartz的使用

    1.quartz的获取. 可參照:Quartz任务调度模型实例 2.开发思路: 要使用定时器quartz.先弄清楚三个概念:调度器.任务.触发器.开发也是依照这三个方面来开发, 1>写一个Job ...

  6. Partition(hdu4651)2013 Multi-University Training Contest 5----(整数拆分一)

    Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. .Net MVC的学习(一)

    套种间作,也挺有意思的--近来学习感悟.DRP学习的同一时候,折腾了点曾经不曾学习可是却非常多次耳闻过的东西--Asp.Net中的MVC架构模式. 一.是什么? MVC,即(Model-View-Co ...

  8. Redis-2-对于key的通用操作

    Redis-2-对于key的通用操作 标签(空格分隔): redis del key key1 key2 作用: 删除1个或多个键 返回值: 不存在的key忽略掉,返回真正删除的key的数量 rena ...

  9. POJ 3261 后缀数组+二分

    思路: 论文题- 二分+对后缀分组 这块一开始不用基数排序 会更快的(其实区别不大) //By SiriusRen #include <cstdio> #include <cstri ...

  10. POJ 3178 凸包+DP (巨坑)

    题意: 思路: 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! (而且没有题解--.5555555--) 只能照着自己想的写了-- 先求出来凸包 求凸包的方法呢:先找出 ...