HDUの三部作のROADS

 

問題の説明
数字1 ... Nと名付けN都市は片道道路に接続されています。道路の長さ(コインの数で表される)道路のために支払われる必要が有料:各道路は、それに関連付けられた2つのパラメータを有しています。ボブとアリスはアリスは、彼らが遊ぶのが好きなカードゲームに浮気されたことに気づいた後、市内1に住んで、ボブは彼女と別れたと離れて移動することを決めた-彼はそこに取得したい都市Nに早くとして可能性が、彼は現金が不足しています。
我々は見つけるために、ボブを助けたい の最短経路を 街のN市内1から 彼は余裕ができ 、彼が持っているお金の量に。
 
入力
入力の最初の行は、整数K、0 <= K <= 10000、ボブは、彼の方法で過ごすことができるコインの最大数を含んでいます。2行目は整数N、2 <= N <= 100、都市の総数を含んでいます。
第三のラインは、整数R、1 <= R <= 10000、道路の総数を含んでいます。
次のRラインの各々は、S、D、LおよびTは、単一の空白文字で区切られた整数を指定することにより、1本の道路を示します。
  • Sは、元の都市、1 <= S <= Nであります
  • Dは、目的地の都市、1 <= D <= Nであります
  • Lは、道路の長さであり、1 <= L <= 100
  • Tが有料である(コインの数で表される)、0 <= T <= 100
別の道路が同じ送信元と送信先の都市を有していても良いことに注意してください。
 
出力
第一及び出力の唯一のラインは、全トール以下K硬貨ある都市N市内1からの最短経路の長さの合計を含むべきです。そのようなパスが存在しない場合は、唯一の数が-1出力に書き込まなければなりません。
 
サンプル入力
5
6
7
1 2 2 3
2 4 3 3
2 3 4 4
1 3 4 1
4 6 1 2
3 5 0 2
5 4 3 2
 
サンプル出力
11
************************************************** *******************************************
最短経路を見つけるためのアルゴリズムspfa
************************************************** *******************************************
1の#include <iostreamの>
 2の#include < ストリング >
 3の#include <CStringの>
 4の#include <キュー>
 5  使って 名前空間STDを、
6  構造体の7  {
 8      int型RP、LEN、ワスト、次。
9 } E [ 10111 ]。
10  構造体  ポイント
 11  {
 12      のint SP、LEN、ワスト。
13      ブール  演算子 <(constの 構造体の c点)CONST // 重载运算符
14        {
15            IF(LEN == c.len)
 16の            リターン c.wast < WAST;
 17            リターン c.len < LEN、
 18である       }
 19  } P1、P2、
 20は INT totalmoney、ヘッド[ 1001 ]、NUM、DIS [ 1001 ] numcity、numpathは、I、J、
 21は 空隙追加(int型の Xは、int型 Y、int型 LL、int型 V)を// 前スター側鎖に添加する
22である       {
 23で          RP = E [NUM]。Y、
 24          E [NUM] = .LEN LL;
 25         E [NUM] .wast = V;
 26である          E [NUM] = .next ;頭部[X]
 27の          ヘッド[X] NUM = ++ ;
 28        }
 29 PRIORITY_QUEUE <ポイント> QQ;
 30  空隙 SPFA()//のソースを見つけます各サイドから
31である {
 32      ながら(!qq.empty())
 33である       )qq.pop(;
 34である      p1.sp = 1 ; p1.len = 0 ; p1.wast = 0 ;
 35      qq.push(P1)。
 36      ながら(!qq.empty())
 37       {
 38が           P2 =qq.top();
39           であれば((p2.sp)== numcity)
 40           {
 41               COUT << p2.len << ENDL。
42               リターン;
43           }
 44           qq.pop()。
45           のためにint型 I =ヘッド[(p2.sp)]; I =! - 1 ; I = E [I] .next)
 46            {
 47               のint Y = E [I] .rp。
48               であれば(p2.wast + E [i]を.wast <= totalmoney)
 49                 {
 50                     p1.len = p2.len + E [i]の.LEN。
51                    p1.wast = p2.wast + E [I] .wast。
52                     p1.sp = Y。
53                     qq.push(P1)。
54                 }
 55            }
 56  
57       }
 58      COUT << " -1 " << ENDL。
59      リターン;
60  }
 61  のint main()の
 62  {
 63      CIN >> totalmoney。
64      のmemset(ヘッド、 - 1はsizeof (ヘッド))。
65      CIN >> numcity >>numpath;
66      NUM = 0 67      int型のx、y、LL、V。
68      のためには、int型 I = 1 ; I <= numpath; iは++ 69       {
 70           CIN >> X >> Y >> LL >> V。
71           (X、Y、LL、V)を加えます。
72       }
 73       spfa()。
74       リターン 0 ;
75 }
コードの表示
 

ます。https://www.cnblogs.com/sdau--codeants/p/3317606.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34310127/article/details/93727628