zoukankan      html  css  js  c++  java
  • find the safest road

    find the safest road

    Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 23   Accepted Submission(s) : 12
    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
     代码:
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define MAX(x,y)(x>y?x:y)
     4 const int MAXN=1010;
     5 double map[MAXN][MAXN],d[MAXN];
     6 int vis[MAXN];
     7 int n;
     8 void initial(){
     9     memset(d,0,sizeof(d));
    10     memset(vis,0,sizeof(vis));
    11 }
    12 void dijskra(int s){
    13     initial();//写错位置了,应该每次都初始化
    14     d[s]=1;
    15     while(true){
    16             int k=-1;
    17         for(int i=1;i<=n;i++)
    18             if(!vis[i]&&(k==-1||d[i]>d[k]))k=i;
    19     if(k==-1)break;
    20     vis[k]=1;
    21     for(int i=1;i<=n;i++)
    22         d[i]=MAX(d[i],d[k]*map[k][i]);
    23     }
    24 }
    25 int main(){int Q,a,b;
    26     while(~scanf("%d",&n)){
    27             memset(map,0,sizeof(map));
    28         for(int i=1;i<=n;i++)
    29         for(int j=1;j<=n;j++)
    30             scanf("%lf",&map[i][j]);
    31         scanf("%d",&Q);
    32         while(Q--){
    33             scanf("%d%d",&a,&b);
    34             dijskra(a);
    35             if(d[b]==0.0)puts("What a pity!");
    36             else printf("%.3lf
    ",d[b]);
    37         }
    38     }
    39     return 0;
    40     }

     SPFA:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<queue>
     4 using namespace std;
     5 const int MAXN=1010;
     6 const int MAXM=2000010;
     7 int head[MAXM],vis[MAXN];
     8 double dis[MAXN];
     9 struct Edge{
    10     int from,to,next;
    11     double value;
    12 };
    13 Edge edg[MAXM];
    14 int n,edgnum;
    15 queue<int>dl;
    16 void initial(){
    17     memset(dis,0,sizeof(dis));
    18     memset(vis,0,sizeof(vis));
    19     while(!dl.empty())dl.pop();
    20 }
    21 void add(int u,int v,double value){
    22     Edge E;
    23     E.from=u;E.to=v;E.value=value;E.next=head[u];
    24     edg[edgnum]=E;
    25     head[u]=edgnum++;
    26 }
    27 void SPFA(int sx){
    28     initial();
    29     dis[sx]=1;
    30     vis[sx]=1;
    31     dl.push(sx);
    32     while(!dl.empty()){
    33         int k=dl.front();
    34         dl.pop();
    35         vis[k]=0;
    36         for(int i=head[k];i!=-1;i=edg[i].next){
    37             int v=edg[i].to;
    38             if(dis[k]*edg[i].value>dis[v]){
    39                 dis[v]=dis[k]*edg[i].value;
    40                 if(!vis[v])
    41                     dl.push(v),vis[v]=1;
    42             }
    43         }
    44     }
    45 }
    46 int main(){
    47     int a,b,Q;
    48     double v;
    49     while(~scanf("%d",&n)){
    50         memset(head,-1,sizeof(head));
    51         edgnum=0;
    52         for(int i=1;i<=n;i++)
    53         for(int j=1;j<=n;j++){
    54             scanf("%lf",&v);
    55             add(i,j,v);
    56         }
    57         scanf("%d",&Q);
    58         while(Q--){
    59             scanf("%d%d",&a,&b);
    60             SPFA(a);
    61             if(dis[b]==0.0)puts("What a pity!");
    62             else printf("%.3lf
    ",dis[b]);
    63         }
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4737550.html
Copyright © 2011-2022 走看看