hdu 1596 乘积的最大值

一般题是 和的最小值 这个是乘积的最大值

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

Dijkstra:

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <cmath>
 6 # define LL long long
 7 using namespace std ;
 8
 9 const int MAXN=1010;
10 const int INF=0x3f3f3f3f;
11 int n ;
12 bool vis[MAXN];
13 double cost[MAXN][MAXN] ;
14 double lowcost[MAXN] ;
15 void Dijkstra(int beg)
16 {
17     for(int i=0;i<n;i++)
18     {
19         lowcost[i]=cost[beg][i];vis[i]=false;;
20     }
21     for(int j=0;j<n;j++)
22     {
23         int k=-1;
24         double Max= -INF;
25         for(int i=0;i<n;i++)
26             if(!vis[i]&&lowcost[i] > Max)
27             {
28                 Max=lowcost[i];
29                 k=i;
30             }
31             if(k==-1)
32                 break ;
33             vis[k]=true;
34             for(int i=0;i<n;i++)
35                 lowcost[i]=max(lowcost[i],lowcost[k]*cost[k][i]) ;
36
37     }
38
39 }
40
41
42
43 int main ()
44 {
45   //  freopen("in.txt","r",stdin) ;
46
47     while (scanf("%d" , &n ) !=EOF)
48     {
49         int i , j ;
50         for (i = 0 ; i < n ; i++)
51             for (j = 0 ; j < n ; j++)
52                scanf("%lf" , &cost[i][j]) ;
53         int m ;
54         scanf("%d" , &m) ;
55         while(m--)
56         {
57             int s , e;
58             scanf("%d %d" , &s , &e) ;
59             Dijkstra(s-1) ;
60             if (lowcost[e-1] > 1 || lowcost[e-1] <= 0)
61                 printf("What a pity!\n") ;
62             else
63                 printf("%.3lf\n" , lowcost[e-1]) ;
64         }
65     }
66
67     return 0 ;
68 }

时间: 2024-10-11 11:57:52

hdu 1596 乘积的最大值的相关文章

hdu 1596 find the safest road(乘积最短路)

题目: 链接:点击打开链接 题意: 思路: 对dijkstra稍作修改即可,每次更新dis[]时改为乘积. 代码: #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 100000000 const int N = 1010; int n,m; double map[N][N],dis[N]; int st,ed; void dijkstra(

HDU 1596 find the safest road (最短路)

find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6973    Accepted Submission(s): 2469 Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1

hdu 1596 find the safest road (最短路径)

find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6119    Accepted Submission(s): 2178 Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间

hdu 1596 find the safest road

http://acm.hdu.edu.cn/showproblem.php?pid=1596 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 1001 5 using namespace std; 6 7 double g[maxn][maxn]; 8 int dis[maxn]; 9 bool vis[maxn]; 10 int n,a,b; 11 12 vo

hdu 1596(Floyd 变形)

http://acm.hdu.edu.cn/showproblem.php?pid=1596 find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6911    Accepted Submission(s): 2450 Problem Description XX星球有很多城市,每个城市之间有一条或

hdu 1596 find the safest road(最短路)

hdu 1596 find the safest road 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 输入包括

hdu 1596

#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define N 1005 #define INF 0x3f3f3f3f double dis[N][N],d[N]; double vis[N]; double dijkstral(int v0,int n,int t) { int i,x,y; double temp; for(i = 1 ; i <

hdu 1596 find the safest road (Dijksrta算法)

find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7536    Accepted Submission(s): 2664 Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1

给一个数组(含有值),输出相邻两位数乘积的最大值

第一种方法: <script type="text/javascript"> //主要用push方法 var tt = [-23, 4, -5, 99, -27, 329, -2, 7, -921]; var su=new Array();//设置空数组 var max=-10000;//设置中间值进行比较 function check() { for(var j = 1; j <= tt.length - 1; j++) {// console.log(tt[j -