• HDU 1596 find the safest road 最短路


    解题报告:求两个点之间的最安全的路线的安全值是多少。

    就是一个最短路的题,要注意的是这题用弗洛伊德过不了,一定要用地杰斯特拉,但是我还有一个不懂的地方,为什么按照我的做法,如果不把每次走过的点标记掉的话,总会选到重复的点,而且如果只标记上一次走过的和起点不重复走的话,还是TLE,求大神。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 int n,Q,visit[1003];
     6 double map[1003][1003],L[1003];
     7 double Djstra(int n,int s,int e) {
     8     memset(visit,0,sizeof(visit));   //前面没有标记走过的点,不知道为什么总会走重复的点,TLE多次 
     9     visit[s] = 1;
    10     memset(L,0,sizeof(L));
    11     L[s] = 1;
    12     L[0] = -1;
    13     while(s != e) {
    14         for(int i  = 1;i<=n;++i)
    15         L[i] = max(L[i],L[s]*map[s][i]);
    16         visit[s] = 1;
    17         s = 0;
    18         for(int i = 1;i<=n;++i)
    19         if(L[i] > L[s] && visit[i]==0)
    20         s = i;
    21         if(s == 0)
    22         break;
    23     }
    24     return L[e];
    25 }
    26 
    27 int main() {
    28     int x,y;
    29     while(scanf("%d",&n)!=EOF) {
    30         for(int i = 1;i<=n;++i)
    31         for(int j = 1;j<=n;++j)
    32         scanf("%lf",&map[i][j]);
    33         scanf("%d",&Q);
    34         while(Q--) {
    35             scanf("%d%d",&x,&y);
    36             double ans = Djstra(n,x,y);
    37             printf(ans? "%.3lf
    ":"What a pity!
    ",ans);
    38         }
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    第1章习题
    生成树相关问题
    cf 710 E Generate a String
    树状数组(BIT)
    HDU 5360 Hiking(2015多校联合)
    Apache HttpClient4.0&HtmlCleaner用法
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    HDU 5328 Problem Killer(2015多校联合)
    HDU 5327 Olympiad(2015多校联合)
    HDU 5335 Walk Out(2015多校联合)
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3258689.html
Copyright © 2020-2023  润新知