HDU 1569 find the safest road

来源:互联网 发布:mac可以玩跑跑卡丁车吗 编辑:程序博客网 时间:2024/06/11 09:24

这道题用Floyd和dijkstra均可以解出。
将各条路径的成绩值维护一下即可,也可以对各条路上的权值取对数,这样所有的路都变成了负值。找乘积的最大值,也就是找负值的最大值即可,贴出第一种方法的AC代码:

#include<iostream>#include<stdio.h>using namespace std;double safe[1010][1010];//double map[1010][1010];int n;void floyd(){    for(int k = 0 ; k < n;k++)    for(int i = 0 ; i < n;i++)    for(int j = 0 ; j < n;j++)    if(safe[i][k]*safe[k][j] > safe[i][j])          safe[i][j] = safe[i][k]*safe[k][j];}int main(){    while(~scanf("%d",&n))    {    for(int i = 0 ; i < n;i++)    for(int j = 0 ; j< n;j++)    {        scanf("%lf",&safe[i][j]);    }    floyd();    int k;    scanf("%d",&k);    while(k--)    {        int x,y;        cin>>x>>y;        x--,y--;        if(safe[x][y])            printf("%.3lf",safe[x][y]);        else             printf("What a pity!");        puts("");    }    }    return 0;}
原创粉丝点击