HDU3191 [数]出力短絡

トピックへのリンク:http://acm.hdu.edu.cn/showproblem.php?pid=3191

どのように多くのパスがあります

時間制限:2000/1000 MS(Javaの/その他)メモリの制限:32768分の32768 K(Javaの/その他)
の合計提出(S):2128受理提出(S):749


問題の説明
  oooccc1は、職場から金曜日まで毎週月曜日に乗るために持っているソフトウェア・エンジニアです。彼は遅く寝るのが大好きので、長い期間のために、彼は最短経路でオフィスに行ってきました...時間が経つ、彼はあなたが見ることができるよう、彼は常に同じパスに乗って、いくつかの変更を持っている必要があることを発見することは退屈です。
  ある日、oooccc1はアイデアを得ました!なぜ私は別のパスを取ることができますか?彼が得たすべてのタスクで疲れて、彼はそれを実行する時間を持っていません。彼の親友として、あなたは彼を助けるつもりです!
  oooccc1が今早く起床しているので、彼は少し長く、最短1以上である、それらのパスを取ることが嬉しいです。正確であるためには、あなたは全ての第2の最短経路を見つけるしようとしています。
  あなたは一緒に彼のオフィスを提示しoooccc'1彼の家と目標点Eの略開始点Sと、有向グラフGを与えられるであろう。そして、グラフにはサイクルがありません。あなたの仕事は、これらのパスがあり、どのように多くありますどのくらいの時間を彼に伝えることです。
 
入力
いくつかの例があります。ファイルの最後まで進みます。
それぞれの場合の最初の行は三つの整数N、M、S、E(3 <= N <= 50、0 <= S、E <N)であり、
Nは、Mは、エッジの数を表し、そのグラフ内のノードを表します、Sはスタート地点の略で、Eは、エンドポイントの略です。
次いで、M線はエッジを説明するために次のXY wです。xは開始点を表し、yはxとyとの間の長さを表しwが、別の点を表します。
すべてのノードは0からN-1にマークされています。
 
出力
それぞれの場合、ください出力長と1つのラインのもの秒最短経路のためにカウントしました。単一のスペースで区切ります。
トピックの効果:マップへのショートバーがある回数を考えると、最後まで先頭を見つけます。
アイデア:非常にシンプルなショートバーに数回質問テンプレートのタイトルが、 WA の議論を見ては、プライオリティキューdijのであると言うことはできませんが、私はエラーにテンプレートコードを変更する必要はありません。
コードは以下の通りであります:
  1の#include <stdio.hの>
   2の#include < ストリング・H>
   3の#include <キュー>
   4  の#define MEM(A、B)のmemset(A、B、はsizeof(a))は
   5  のconst  int型 MAXN = 55   6  のconst  int型 MAXM = 5000 ;
  7  CONST  INT INF = 0x3f3f3f3f   8  使用して 名前空間はstdを、
  9  
10  INTのN、M、ST、ED。
11  int型ヘッド[MAXN]、CNT。
12件 のint DIS [ 2] [MAXN]、NUM [ 2 ] [MAXN]、VIS [ 2 ] [MAXN]。
13  
14  構造体のエッジ
 15  {
 16      、INT 、隣、W。
17  }エッジ[MAXM]。
18  
19  構造体ノード
 20  {
 21      のint ID、DIS、P。
22      ブール 演算子 <(constのノード&A)CONST  
23      {
 24          リターン DIS> a.dis。
25      }
 26  }なし。
27  
28  ボイドアドオン(int型int型 B、INT c)の
 29  {
 30      CNT ++ 31      エッジ[CNT] .TO = B。
32      エッジ[CNT] .W = C。
33      エッジ[CNT] .next = ヘッド[A]。
34      頭[A] = CNT。
35  }
 36  
37  ボイドをDij()
 38  {
 39      MEM(VIS、0 );
40      PRIORITY_QUEUE <ノード> Q;
41      のためにint型 I = 0を私は++; iがN < 42     {
 43の          DIS [ 0 ] [I] = DIS [ 1 ] [I] = INF。
44          NUM [ 0 ] [I] = NUM [ 1 ] [I] = 0 ;
45      }
 46の      DIS [ 0 ] [ST]は= 0 47      NUM [ 0 ] [ST]は= 1 48      no.p = 0、no.id = STは、= no.dis 0 49      Q.push(なし)。
50      ながら(!Q.empty())
 51      {
 52          ノード=Q.top();
53          Q.pop()。
54          であれば(VIS [AP] [a.id])
 55              続けます56          VIS [AP] [a.id] = 1 57          のためにint型 I =ヘッド[a.id]; I =! - 1 ; I = エッジ[I] .next)
 58          {
 59              INT =のエッジ[I] .TO。
60              であれば(DIS [ 0 ] [する]> DIS [AP] [a.id] + エッジ[I] .W)
 61              {
 62の                  DIS [ 1 ] [へ] [=のDIS 0 ] [します]。
63                 DIS [ 0 ] [する] = DIS [AP] [a.id] + エッジ[I] .W。
64                  NUM [ 1 ] [する] = NUM [ 0 ] [します]。
65                  NUM [ 0 ] [する] = NUM [AP] [a.id]。
66                  no.p = 0、no.dis = DIS [ 0 ] [する]、no.id = であり;
67                  Q.push(なし)。
68                  no.p = 1、no.dis = DIS [ 1 ] [する]、no.id = であり;
69                  Q.push(NO)。
70              }
 71              、他の 場合(DIS [ 0 ] [する] == DIS [AP] [a.id] + エッジ[i]は.W)
 72                  NUM [ 0 ] [する] + = NUM [AP] [a.id]。
73              他の 場合(DIS [ 1 ] [する]> DIS [AP] [a.id] + エッジ[I] .W)
 74              {
 75の                  DIS [ 1 ] [する] =のDIS [AP] [a.id] + エッジ[I] .W。
76                  NUM [ 1 ] [する] = NUM [AP] [a.id]。
77                  no.p = 1、no.dis = DIS [ 1 ] [する]、no.id = であり;
78                  Q.push(NO)。
79              }
 80              そう であれば(DIS [ 1 ] [する] == DIS [AP] [a.id] + エッジ[i]は.W)
 81                  NUM [ 1 ] [する] + = NUM [AP] [a.id ];
82          }
 83      }
 84  }
 85  
86  のint main()の
 87  {
 88      ながら(scanf関数(" %D%D%D%D "、&​​N、&M、&ST&ED)=!EOF)
 89      {
 90          MEM(頭、 - 1)、CNT = 0 91          のためにint型 I = 1 ; I <= M。私は++ 92          {
 93              int型 A、B、C。// 有向图
94              のscanf(" %D%D%D "、&​​A、&B、&C)。
95              追加(A、B、C)。
96          }
 97          をDij()。
98          のprintf(" %D%D \ n "、DIS [ 1 ] [編]、NUM [ 1 ] [ED])。
99      }
 100      戻り 0 ;
101 }
HDU3191

 

 

おすすめ

転載: www.cnblogs.com/yuanweidao/p/11481782.html