黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

HDU 1596 find the safest road (最短路)

系統(tǒng) 2257 0

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星球有非常多城市,每一個(gè)城市之間有一條或多條飛行通道,可是并非全部的路都是非常安全的,每一條路有一個(gè)安全系數(shù)s,s是在 0 和 1 間的實(shí)數(shù)(包含0,1),一條從u 到 v 的通道P 的安全度為Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的邊 ,如今8600 想出去旅游,面對這這么多的路,他想找一條最安全的路。可是8600 的數(shù)學(xué)不好,想請你幫忙 ^_^
?

Input
輸入包含多個(gè)測試實(shí)例,每一個(gè)實(shí)例包含:
第一行:n。n表示城市的個(gè)數(shù)n<=1000;
接著是一個(gè)n*n的矩陣表示兩個(gè)城市之間的安全系數(shù),(0能夠理解為那兩個(gè)城市之間沒有直接的通道)
接著是Q個(gè)8600要旅游的路線,每行有兩個(gè)數(shù)字,表示8600所在的城市和要去的城市
?

Output
假設(shè)86無法達(dá)到他的目的地,輸出"What a pity!",
其它的輸出這兩個(gè)城市之間的最安全道路的安全系數(shù),保留三位小數(shù)。
?

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
?

Author
ailyanlu
?

Source
?

Recommend
8600???|???We have carefully selected several similar problems for you:?? 1217 ? 1598 ? 1142 ? 1690 ? 1385

題意非常明確了,還是一些小細(xì)節(jié)的問題,模板打多了毀帶來一些思維僵化,
所以找一些模板題但又有些變通的題最好了。

代碼:1671MS
        
          #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>

        
        
          
            using namespace
          
        
         std
        
          
            ;
          
        
        
          
#define M 1050

        
        
          
            int
          
        
         n
        
          
            ,
          
        
        m
        
          
            ;
          
          
             double
          
        
         map
        
          
            [
          
        
        M
        
          
            ][
          
        
        M
        
          
            ],
          
        
        dis
        
          
            [
          
        
        M
        
          
            ];
          
          
             void
          
        
         Dijkstra
        
          
            (
          
          
            int
          
        
         x
        
          
            ,
          
          
            int
          
        
         y
        
          
            ) {
          
          
             bool
          
        
         v
        
          
            [
          
        
        M
        
          
            ]={
          
        
        
          0
        
        
          
            };
          
          
             int
          
        
         i
        
          
            ,
          
        
        j
        
          
            ;
          
          
             for
          
          
            (
          
        
        i
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        i
        
          
            <=
          
        
        n
        
          
            ;
          
        
        i
        
          
            ++)
          
        
         dis
        
          
            [
          
        
        i
        
          
            ]=(
          
        
        i
        
          
            ==
          
        
        x
        
          
            ?
          
        
        
          1
        
        
          
            :
          
        
        
          0
        
        
          
            );
          
          
             for
          
          
            (
          
        
        i
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        i
        
          
            <=
          
        
        n
        
          
            ;
          
        
        i
        
          
            ++) {
          
          
             int
          
        
         k
        
          
            ;
          
          
             double
          
        
         Min
        
          
            =
          
        
        
          0
        
        
          
            ; //在這里WA了一發(fā),模板打多了就僅僅會(huì)int了。
          
          
             for
          
          
            (
          
        
        j
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        j
        
          
            <=
          
        
        n
        
          
            ;
          
        
        j
        
          
            ++)
          
          
             if
          
          
            (!
          
        
        v
        
          
            [
          
        
        j
        
          
            ] &&
          
        
         dis
        
          
            [
          
        
        j
        
          
            ]>
          
        
        Min
        
          
            )
          
        
         Min
        
          
            =
          
        
        dis
        
          
            [
          
        
        k
        
          
            =
          
        
        j
        
          
            ];
          
        
        
      v
        
          
            [
          
        
        k
        
          
            ]=
          
        
        
          1
        
        
          
            ;
          
          
             for
          
          
            (
          
        
        j
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        j
        
          
            <=
          
        
        n
        
          
            ;
          
        
        j
        
          
            ++)
          
        
         dis
        
          
            [
          
        
        j
        
          
            ]=
          
        
        max
        
          
            (
          
        
        dis
        
          
            [
          
        
        j
        
          
            ],
          
        
        dis
        
          
            [
          
        
        k
        
          
            ]*
          
        
        map
        
          
            [
          
        
        k
        
          
            ][
          
        
        j
        
          
            ]); }
          
          
             if
          
          
            (
          
        
        dis
        
          
            [
          
        
        y
        
          
            ])
          
        
         printf
        
          
            (
          
        
        
          "%.3lf\n"
        
        
          
            ,
          
        
        dis
        
          
            [
          
        
        y
        
          
            ]);
          
          
             else
          
        
         printf
        
          
            (
          
        
        
          "What a pity!\n"
        
        
          
            ); }
          
          
             int
          
          
             main
          
          
            () {
          
          
             int
          
        
         i
        
          
            ,
          
        
        j
        
          
            ;
          
          
             int
          
        
         a
        
          
            ,
          
        
        b
        
          
            ,
          
        
        c
        
          
            ;
          
          
             while
          
          
            (
          
        
        scanf
        
          
            (
          
        
        
          "%d"
        
        
          
            ,&
          
        
        n
        
          
            )!=
          
        
        EOF
        
          
             &&
          
        
         n
        
          
            ) {
          
        
        
      memset
        
          
            (
          
        
        map
        
          
            ,
          
        
        
          0
        
        
          
            ,
          
          
            sizeof
          
          
            (
          
        
        map
        
          
            ));
          
          
             for
          
          
            (
          
        
        i
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        i
        
          
            <=
          
        
        n
        
          
            ;
          
        
        i
        
          
            ++)
          
          
             for
          
          
            (
          
        
        j
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        j
        
          
            <=
          
        
        n
        
          
            ;
          
        
        j
        
          
            ++) {
          
        
        
          scanf
        
          
            (
          
        
        
          "%lf"
        
        
          
            ,&
          
        
        map
        
          
            [
          
        
        i
        
          
            ][
          
        
        j
        
          
            ]); }
          
        
        
      //題目給的是鄰接矩陣,所以不要初始化了。
      scanf
        
          
            (
          
        
        
          "%d"
        
        
          
            ,&
          
        
        m
        
          
            );
          
          
             for
          
          
            (
          
        
        i
        
          
            =
          
        
        
          1
        
        
          
            ;
          
        
        i
        
          
            <=
          
        
        m
        
          
            ;
          
        
        i
        
          
            ++) {
          
        
        
       scanf
        
          
            (
          
        
        
          "%d%d"
        
        
          
            ,&
          
        
        a
        
          
            ,&
          
        
        b
        
          
            );
          
        
        
       Dijkstra
        
          
            (
          
        
        a
        
          
            ,
          
        
        b
        
          
            ); } }
          
          
             return
          
        
        
           0
        
        
          
            ; }
          
        
      
我個(gè)人覺得用Floyd算法應(yīng)該也能夠,就是時(shí)限的問題了。
這題應(yīng)該要用SPFA算法去做,只是時(shí)限放的非常寬,所以就變成模板題了。
事實(shí)上精品題和模板題差距就在時(shí)限和思想雙方面。

HDU 1596 find the safest road (最短路)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論