C時間制限:3000ミリ秒| Cのメモリ制限:3000 KB
タイトル内容:
エンジェル最近退屈は、クリスマス島(CX * ^ _ ^ *)に行ってきました 、 彼は目的なしにさまようのが好き、もちろん、彼は簡単に戻って行くことはありません。天使はしたかった
、彼はそれを取得する場合、その後、広場に行きますか?あなたは、マップ上のN(N <= 100)の交差点があり、CXマップを持って渡りました
道路の分岐点間の道路(道路なし1,000人以上)にあっ接続されています。奇妙CX人は除いて、一方通行です道路のルールに従っているため
、道路との間に一定の距離がある、我々はポイント1の天使、広場がNである地点の場所と仮定 エンジェルは、単位距離を想定して歩いて
離れて時間単位の必要性から。天使は何時間最初と最後の到着広場を尋ねましたか?
入力説明
データセットのタイトル複数の第一列N、M、Mは、M行の後、三つの整数X、Yの各行のエッジの数であり、重さ、Xはから1を表し、
都市Y、サイドWweightの長さに都市。
出力説明
データの各セットは、最初の行は出力、貧しいエンジェルプラザが届かないかもしれない場合に、第2のラインは、最新の時間であり、最小時間である
決しての行。
入力サンプル
。5. 5
。1 2 1
。1. 4 10
2. 3. 1
。3. 1. 4
。4. 5. 1
の出力例
。4
。11
アイデア:
この質問は、ボードによって直接考慮され、任意の2点間のアルゴリズムの最短フロイド・ウォーシャルのアイデアのために使用されています
コード:
書式#include <iostreamの> 書式#include <stdio.hに> 使って 名前空間はstdを、 const int型 MAXN = 1E3 + 10 。 #define Infの0x3f3f3f3f INT A [MAXN] [MAXN]。 INT [MAXN] [MAXN] B。 INT のmain(){ int型N、M。 CIN >> N >> M。 INT X、Y、W。 以下のために(int型 i = 1 ; iは= N <I ++ ) のための(INT J = 1 ; J <= nであり、j ++ ){ 場合(I == j)は [I] [J] = 0 ; 他の [I] [J] = infが、 } のために(int型 I = 1は iが++; iがn = < {) のために(int型の J = 1 ; J <= nであり、j ++ ){ B [i]は[J] = 0 ; } } のための(int型 I = 1 ; I <= M Iは++ ){ scanf関数(" %D%D%D "、およびX&Y、&W)。 [X] [Y] = Wは、 B [X] [Y] = W。 } のための(int型のk = 1 ; kは<= nであり、k ++ ){ ため(int型 i = 1 ; iが<= N iが++ ){ ため(INT J = 1 ; J <= nであり、j ++ ){ もし [( I] [K] + [K] [J] < [I] [J]){ [i] [j]は [I] [K] + = [K] [j]を。 } } } } COUT << [ 1 ] [N] << ENDL。 以下のための(int型K = 1あり、k <= nであり、k ++ ){ ため(int型 I = 1 iが<= N; iが++ ){ ため(INT J = 1 ; J <= nであり、j ++ ){ もし!(B [i]は[K] = 0 && B [k]は[J]!= 0 && B [i]は[K] + B [k]は[J]> B [i]は[J]) B [i] [j]は、B [i]は[k]を= + B [k]は[J]。 } } } COUT << B [ 1 ] [N] << ENDL。 リターン 0 ; }